我在azure中注册了两个应用程序,一个是基于Web的客户端,另一个是基于Web的服务。该设置类似于此处的示例:https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi
用户通过azure b2c登录客户端,然后客户端通过azure b2c对服务进行查询,以获取其数据。
该服务未在持有人令牌中收到预期的声明。
Azure B2C 表示您为给定策略选择的声明将包含在“令牌”中,我认为这是一个不记名令牌。下面是我选择的一些声明的屏幕截图。
然而,当我从持有人令牌中提取索赔时,我得到的服务没有得到承诺的索赔。相反,我得到下面显示的声明。
我使用的UseOAuthBearerAuthentication
与github上提供的示例相同(上面链接)。
我错过了什么吗? 我如何得到b2c承诺的声明?
答案 0 :(得分:2)
应用声明包含在id_token中,而不是access_token( aka bearer token )。
这意味着Select application claims
将允许您的客户端应用程序(本机应用程序或Web应用程序)访问这些自定义声明。
如果您想要从后端服务访问自定义声明,则需要call the Azure AD Graph 使用客户端凭据流并调用用户端点,如下所示:
https://graph.windows.net/<yourtenant.onmicrosoft.com>/users/<userId>
使用以下格式检索属性:
extension_<b2c-extensions-app_appId>_<customAttributeName>
例如:
extension_e5bf5a2db0c9415cb62661a70d8f0a68_MyCustomAttribute
您也可以通过图表获取B2C租户的b2c-extensions-app的ID:
https://graph.windows.net/<yourtenant.onmicrosoft.com>/applications?$filter=displayName eq 'b2c-extensions-app'
有关详情,请参阅此帖子: Moving Azure AD B2C custom user attributes across new environments