Azure active directory OpenId连接身份验证&;Azure广告范围混乱

Azure active directory OpenId连接身份验证&;Azure广告范围混乱,azure-active-directory,azure-ad-graph-api,Azure Active Directory,Azure Ad Graph Api,我试图理解我在OpenIdConnectAuthenticationOptions的Scope属性中请求的作用域与访问令牌中返回的内容之间的相关性 当我只请求“openid配置文件”时,我得到了用户或管理员许可的所有作用域。此外,返回的访问令牌的版本似乎取决于scopes请求。例如,如果我包括我的注册”api://........". 我相信我已经在版本2的清单中配置了我的web应用程序和api 例如:“openid profile”返回我的访问令牌中的作用域“Directory.Read.Al

我试图理解我在OpenIdConnectAuthenticationOptions的Scope属性中请求的作用域与访问令牌中返回的内容之间的相关性

当我只请求“openid配置文件”时,我得到了用户或管理员许可的所有作用域。此外,返回的访问令牌的版本似乎取决于scopes请求。例如,如果我包括我的注册”api://........". 我相信我已经在版本2的清单中配置了我的web应用程序和api

例如:“openid profile”返回我的访问令牌中的作用域“Directory.Read.All Group.Read.All User.Read profile openid email”

某些作用域是否自动映射到其他作用域,或者对此是否有一些逻辑?就我个人的理解而言,我正试图找到一些逻辑上的因果关系。

当您仅将“openid配置文件”放入范围时,默认情况下,access令牌“Directory.Read.All Group.Read.All User.Read profile openid email”中的默认范围是针对Microsoft Graph API的。这是故意的

因为此访问令牌用于,其中用户信息实际上来自Microsoft Graph


当你把api://........“在范围中,访问令牌将用于您的API应用程序。访问令牌中有一个
aud
声明,用于标识令牌的预期收件人。您可以进行检查。

因此,添加我的api://..... 作用域请求会自动覆盖其他作用域,并发出仅为我的API生成访问令牌的信号?默认情况下,MS Graph access令牌是否也是v1令牌?我注意到,当它只是一个图形标记时,它是v1。也许这并不重要,但我很好奇我是否遗漏了什么。@MViglainco一般来说,您在
范围中放置的第一个将生效。例如“api://.....  “user.read”,第一个用于API,第二个用于Graph。在这种情况下,访问令牌用于API。但这不是设置
范围的推荐方法。一个令牌用于一个资源。因此,我们不应该放置来自不同资源的多个权限。MS Graph访问令牌默认为v1,不能更改为v2。自定义API访问令牌可以连接到v2。再次感谢。这是有道理的。当您需要多个资源的访问令牌时,您是否知道如何接近这些资源?如果我的理解是正确的,那么这似乎是不可能的。登录时,您可以将身份验证代码和客户端id/secret交换为访问令牌。我的理解是代码是一次性使用的。那么如何获取其他资源令牌呢?此时我手头上的刷新令牌仅对原始资源有效。@MViglainco您可以使用手头上的刷新令牌通过将
范围指定为“其他资源”来调用带有“其他资源”的
/token
端点。例如,访问令牌和刷新令牌当前用于您自己的API。您可以像这样调用
/token
客户端id=6731de76-14a6-49ae-97bc-6EBA69491E&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read&refresh\u token=OAAABAAAAAIL9KN2Z27UUWBWFPBM0GLWQJVZCTE9UKP3PSX1AXXUJQ…&grant\u type=refresh\u token&client\u secret=JQX2PNO9BPM0UEIHupZYRH
。在这种情况下,新的访问令牌是针对Microsoft Graph的。@MViglainco刷新令牌文档如下: