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

How can the Azure Active Directory Authentication Service be forced to reissue an id_token with updated claims?

我们正在使用 Azure B2C 对我们的用户进行身份验证,工作正常。注册后,我们向我们的用户添加了一些自定义声明,这些声明在 B2C 门户中使用图表 api 定义为 "User attributes"。当我登录到门户网站时,我可以看到这些值已由我们的调用设置,一些标准声明值也是如此(即我们还通过连接 givenName 和 lastName 值来设置显示名称)。

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

这没有意义,因为让用户在登录到应用程序时更新他们的配置文件(声明值)并让这些更改立即生效而不需要重新验证似乎是非常明智的?

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

The issue we are having is that after these values are set, they do not appear in the token retrieved by sending the access token to the authenticate endpoints until the user is logged out and back in again (which is obviously a pretty awful user experience after signup).

能否显示有关您如何获取 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。使用没有 sign-out/sign-in 的 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 的缓存。

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

"Product Group identify that this is on the roadmap even that we still don't have a final date it should happen in a few months."

所以基本上他们还没有承认这是一个错误,他们也不知道什么时候会支持这种情况。老实说,支持水平很差。