【发布时间】:2021-04-19 20:59:38
【问题描述】:
这是迄今为止我的创业公司的 sn-p:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownStreamApi(initialScopes)
.AddMicrosoftGraph(Configuration.GetSection("GraphAPI"))
.AddInMemoryTokenCaches();
使用上面的配置,我应该得到登录屏幕,我看到反向通道 http 请求正在访问 .well-known-config,获取端点,将登录结果发布到我的 redirectUrl。我还看到中间件正在访问令牌端点并获取具有正确范围(包括 User.ReadBasic.All)的 access_token,但它没有使用该令牌来访问 userInfo 端点并检索与用户关联的那些声明。 ReadBasic.All.
我是不是配置错了,还是需要在某个地方手动配置?如果我必须手动配置它似乎很愚蠢,当普通的 OpenIdConnect 中间件有一个选项设置为 true 时,它会自动为您获取这些声明。
编辑:我忘了提到,如果我改用 OpenIdConnect 中间件,我可以毫无问题地得到所有这些声明,所以这不是 Azure 配置问题。
请帮忙。
【问题讨论】:
-
but it is NOT using that token to hit the userInfo endpoint and retrieve those claims associated with User.ReadBasic.All.这是什么意思?它会给你任何错误信息或状态码吗? -
没有错误,中间件根本不会使用从令牌端点获得的 access_token 向 userinfo 端点发出 http 请求。即使我手动将“GetClaimsFromUserInfoEndpoint”设置为 true,该调用也不会发生。昨天大部分时间我都在使用 dotPeek 调试中间件,但这是一个巨大的痛苦。
-
“code id_token”流程如下:客户端请求登录并提供所需的客户端凭据,如果用户正确登录,IDP将返回一个authorization_code和一个id_token。 id_token 将有一些基本级别的声明,但不是全部,以避免票证膨胀。如果客户端需要更多声明,它将对令牌端点使用授权码,然后对用户信息端点使用生成的 access_token。中间件有一个选项 GetClaimsFromUserInfoEndpoint 来启用/禁用。适用于 openConnectMiddleware 而不是 MicrosoftIdentity 中间件
-
那么您的 UserInfo 端点是什么?您能否分享更多详细信息并告诉我们哪条线不起作用?
-
@Rena 这只是标准的graph.microsoft.com{tenantidhere}/oidc/userinfo。它在发现文档中定义,中间件用于命中令牌端点并获取命中 userinfo 端点所需的令牌,但它只是没有命中。我的直觉告诉我,新 IdentityPlatform 中间件中的那个选项没有被正确使用......
标签: asp.net-core azure-active-directory openid-connect microsoft-identity-platform