如何获得azure b2c承诺的持有人令牌声明?

时间:2017-08-03 21:36:59

标签: azure asp.net-web-api azure-ad-b2c

背景

我在azure中注册了两个应用程序,一个是基于Web的客户端,另一个是基于Web的服务。该设置类似于此处的示例:https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi

用户通过azure b2c登录客户端,然后客户端通过azure b2c对服务进行查询,以获取其数据。

问题

该服务未在持有人令牌中收到预期的声明。

具体细节

Azure B2C 表示您为给定策略选择的声明将包含在“令牌”中,我认为这是一个不记名令牌。下面是我选择的一些声明的屏幕截图。 claims for my signup-or-signin policy

然而,当我从持有人令牌中提取索赔时,我得到的服务没有得到承诺的索赔。相反,我得到下面显示的声明。 actual claims received

我使用的UseOAuthBearerAuthentication与github上提供的示例相同(上面链接)。

我错过了什么吗? 我如何得到b2c承诺的声明?

1 个答案:

答案 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