oauth2.0 Azure AD,针对多个作用域的身份验证和授权,如何默默地做?

ar5n3qh5  于 2023-08-02  发布在  其他
关注(0)|答案(1)|浏览(134)

我正在尝试使用Flutter为Windows桌面应用程序进行身份验证。六个服务有六个作用域(五个是我的,一个是Graph),我让我的用户登录六次,以获得六个不同的授权码。
我已经在AAD注册了我的应用程序,并为我的五个服务添加了范围,还为Graph服务添加了范围:

https://my.cool.service1/user_impersonation...https://my.cool.service5/user_impersonation  https://graph.microsoft.com/User.Read

字符串
首先,我创建一个URL:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?client_id={clientId}&response_type=code&redirect_uri={https://localhost/9081}&response_mode=query&scope={takeAnyScopeYouLike}&code_challenge={codeChallengeCode}&code_challenge_method=S256


然后我的应用程序启动默认浏览器,用户输入登录名和密码,然后调用重定向URL,然后我的应用程序的http服务器监听响应并解析它以获得授权代码,稍后将使用该代码获得访问令牌。现在我想获取另一个作用域的授权码,我需要所有服务的访问令牌。我不知道如何安静地完成它,因为对所有六个作用域重复这个过程将使我的用户执行六次登录密码作业,这显然是不好的。我无法一次将所有作用域传递给登录端点,并且我无法对所有作用域使用一个authorization_code,因为它仅针对一个作用域确定。谁能告诉我如何在没有用户交互的情况下获得访问令牌?

y3bcpkx1

y3bcpkx11#

我创建了一个Azure AD应用程序并授予API权限,如下所示:
x1c 0d1x的数据
您可以使用On-Behalf-Of流程,使用一个访问令牌调用API,如下所示:

https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize?
&client_id=ClientID
&response_type=code
&redirect_uri=https://jwt.ms 
&response_mode=query
&scope=api://ClientID/test.read
&state=12345

字符串
生成auth-code成功:



我使用以下参数生成了访问令牌

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
grant_type:authorization_code
scope:api://ClientID/test.read
code:code
redirect_uri:https://jwt.ms
client_secret:ClientSecret



使用上面生成的访问令牌,我尝试调用API 2如下:

scope:api://App2ClientID/access_as_user



通过使用相同的访问令牌,我也可以调用Microsoft Graph API

scope:https://graph.microsoft.com/User.Read


x1c4d 1x的

相关问题