如何强制Azure Active Directory身份验证服务重新发出带有更新声明的id_token?

时间:2016-11-10 09:48:17

标签: azure active-directory azure-ad-b2c

我们正在使用Azure B2C来验证我们的用户是否正常工作。注册后,我们向用户添加了一些自定义声明,这些声明在B2C门户中被定义为"用户属性"使用图api。当我登录门户时,我可以看到这些值已经被我们的调用设置,因为有一些标准的声明值(即我们还通过连接givenName和lastName值来设置显示名称)。

我们遇到的问题是,在设置这些值之后,它们不会出现在通过将访问令牌发送到身份验证端点而检索到的令牌中,直到用户注销并再次返回(这显然是非常糟糕的注册后的用户体验)。看起来在创建用户时会缓存原始的id_token,而这正是返回的内容。

这没有意义,因为让用户在登录应用程序时更新其配置文件(声明值)并且这些更改立即生效而无需重新进行身份验证似乎是完全合理的?

有人可以解释如何/是否可以强制服务器上的缓存id_token过期,这样当我们使用访问令牌请求id_token时,id_token包含最新的声明值?

2 个答案:

答案 0 :(得分:4)

  

我们遇到的问题是,在设置这些值之后,它们不会出现在通过将访问令牌发送到身份验证端点而检索到的令牌中,直到用户注销并再次返回(这显然是非常糟糕的注册后的用户体验)。

您是否介意显示有关如何获取id_token的请求详细信息?

根据我的测试,我可以获得id_token,其中包含以下步骤更新的声明:

1。登录网络应用

2。使用Azure AD Graph更新 DisplayName ,如下所示:

POST: https://graph.windows.net/xxxx.onmicrosoft.com/users/{userId}?api-version=1.6
{
     "displayName":"newValue"
}

3。使用HTTP请求从OAuth2.0授权端点重新请求id_token,无需注销/登录(您也可以在登录应用时使用Fiddler捕获确切的请求)

 GET:https://login.microsoftonline.com/xxxx.onmicrosoft.com/oauth2/authorize?client_id={clientId}&redirect_uri={redirectURL}&response_type=id_token&scope=email+openid&response_mode=query&nonce=HWUavSky1PksCJC5Q0xHsw%3d%3d&nux=1&nca=1&domain_hint={XXXX.onmicrosoft.com}

4。更新声明值在新id_token中显示为预期

要缩小此问题的范围,您可能会看到应用中是否有id_token的缓存。

答案 1 :(得分:1)

好的,等待近一个月的回复之后,官方的话就是:

"产品组确定这是在路线图上,即使我们仍然没有在几个月内确定最终日期。"

所以基本上他们还没有承认这是一个错误,他们不能告诉我们何时会支持这种情况。说实话,支持水平很差。