【问题标题】:Azure AD B2C Access token claims do not update after refreshing tokenAzure AD B2C 访问令牌声明在刷新令牌后不更新
【发布时间】:2020-08-13 09:58:19
【问题描述】:

我们在我们的应用程序中使用 Azure AD B2C。 我们使用 API 授权用户

https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?client_id=<client-id-uuid>
&nonce=defaultNonce&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Findex.html
&scope=openid%20offline_access%20https%3A%2F%2F{tenant}.onmicrosoft.com%2F<client-id-uuid>%2FUser.all
&response_type=code&prompt=login

使用上面我们获取授权码。

此身份验证代码用于通过应用程序对用户进行身份验证并获取 access_tokenrefresh_tokenid_token 使用

POST /{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1
Host: {tenant}.b2clogin.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

grant_type=authorization_code&code={auth code received in previous step}
&scope=openid%20offline_access%20https%3A%2F%2F{tenant}.onmicrosoft.com%2F<client-id-uuid>%2FUser.all
&client_id={client id}&redirect_uri=localhost%253A4200%252Flogin.html%3A

身份验证后,代码用于访问各种端点和天蓝色功能。 在 hte 过程中,我们需要用户在唱歌时输入的用户属性,例如电子邮件、显示名称、国家/地区等信息。 除了默认属性外,我们还有一些自定义属性,例如 team_name,这是特定于我们的 Web 应用程序用例的。这些属性会随着时间而变化。

例如:一个人可以切换团队。因此我们使用 Graph API 在用户属性中修改它。 所以在这种情况下,如果属性 team_name = 'Team ABC' 现在更改为 team_name = 'Team XYZ'

但是属性更改后,属性并没有反映access_token/refresh_tokenid_token中的新值。有没有一种方法可以在不重新授权用户的情况下获取令牌中的刷新值?

目前我们从 Graph API 获取用户属性,但如果我们在令牌中获得刷新值,它会更快更方便。

【问题讨论】:

  • 您是否有机会查看此类似的 SO question 并告诉我们是否有帮助
  • @Raghavendra-MSFTIdentity 是的,这是完全相同的问题。如果不要求用户注销/登录,则不会刷新声明。我有自定义声明,这些声明在注册/登录后更新。我希望它们也能在我的访问令牌中更新
  • 感谢您告知我们。让我检查一下并回复你

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


【解决方案1】:

自定义政策没有公开记录的机制来在刷新令牌流中获取新的访问令牌声明。所以你所观察到的是预期的

【讨论】:

  • @raghvendra 谢谢。我想要我在原始问题中提到的最新值。目前似乎不支持它,并且只有在注销后才会刷新值。
  • 声明访问令牌中的值在过期后不会刷新。他们只是刷新我注销并获取新的身份验证代码
  • 嗨@AnshulJain 我已经验证并相应地更新了我的答案。如果有帮助,请告诉我们
  • 有计划支持这个吗?这个想法有用户的声音吗?
  • 嗨@tank104 它似乎在路线图上,目前我们无法提供时间表。我希望在另一个SO question 中清除您的查询。 Jas 在第二条评论中也提到了路线图的计划。谢谢
【解决方案2】:

作为一种解决方法,我们发现当通过 SSO cookie(Azure B2C 配置门户中的“Web 应用会话”)刷新身份验证时,声明会被刷新。

我认为这基本上相当于“重新登录”,但没有用户可见的提示。 我们正在使用 msal-browser 库为我们自动进行 SSO 登录(它为此使用隐藏的 iframe),但我认为您也可以手动进行。

您需要使用所有常用查询参数调用/authorize 端点,并且:

  • prompt=none 必须设置
  • 必须设置sid(带有帐户ID)或login_hint(带有用户名)之一

没有自己手动完成,所以我可能仍然遗漏了一些东西,但我认为这些应该是主要的。

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 2018-01-21
    • 2018-01-08
    • 1970-01-01
    • 2019-08-31
    • 2018-12-20
    • 2019-08-25
    • 2020-05-17
    • 2020-03-17
    相关资源
    最近更新 更多