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

问题描述 投票:6回答:2

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

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

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

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

azure active-directory azure-ad-b2c
2个回答
4
投票

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

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

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

1。登录Web应用程序

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
投票

好吧,经过将近一个月的等待回复,官方路线是:

“产品组认为这是在路线图上,即使我们仍然没有在几个月内完成的最终日期。”

所以基本上他们没有承认这是一个错误,他们无法分辨何时会支持这种情况。说实话,支持水平很差。

© www.soinside.com 2019 - 2024. All rights reserved.