自动刷新令牌并添加新的用户安全组 Azure AD

use*_*012 6 azure azure-active-directory claims-authentication

我有一个简单的 ASP.Net Web-APP,使用 Azure AD 和角色/声明身份验证/授权。基本上,应用程序会检查用户的 IsinRole(),然后根据返回的内容,他可以访问网络应用程序的区域。我们在 Azure AD 中使用安全组。这里的场景是用户属于 Group1,登录网络应用程序后他可以访问 Group1 区域,现在后端管理员将用户添加到 Group2,我们想要的是用户无需注销并重新登录门户我们希望他的令牌也包含这个新添加的 Group2。无论如何,是否可以刷新令牌,为该用户令牌添加额外的 group2,而无需他注销并进入应用程序?

有什么办法可以用新信息强制刷新令牌吗?

感谢你的帮助。

谢谢。

Roh*_*gal 4

刷新令牌以获取新的访问令牌

如果您在 Web 应用程序中使用类似授权代码授予的授权,一种方法可能是使用 aRefresh Token来获取新的授权。Access Token

您可以在此处阅读更多相关信息 -刷新访问令牌

您的应用程序将需要决定何时获取新的访问令牌。因此,当它意识到后端组件/管理员已更新组成员资格时,它就可以执行此操作。

现在,您尚未提及的一个单独主题是用户已登录的 Web 应用程序如何了解此类事件,但诸如 SingalR 通知之类的内容可能会有所帮助。

注意事项:

  • 使用刷新令牌可能有点脆弱,因为它们可能会因应用程序无法控制的原因而被撤销(例如用户密码更改、过期(虽然时间很长)以及其他原因)。如果出现此类错误,获取新的授权码将是唯一的选择。

  • 刷新令牌必须安全保存

  • 特别是在索赔的情况下,groups可能会出现超额情况,仅使用访问令牌可能无济于事。


替代方法(而不是像您提到的那样尝试使用新信息强制刷新令牌)

如果groups声明是您所追求的,那么请使用它Microsoft Graph API来获取有关用户所属安全组的信息,而不是仅查看访问令牌。

您的应用程序代码可以随时再次调用 Microsoft Graph API 以获取新的成员身份详细信息,即按照您的示例的组 1 和组 2(当它知道组成员身份已由后端组件/管理员更新时)。SignalR 或其他一些通知您的应用程序此类更改的方式也与此相关。

相关的 Microsoft Graph API

优点

  1. 您可以解决用户属于多个组的任何超额情况,因此访问令牌不会以任何方式为您提供所需的所有组信息。

  2. 您无需强制用户注销并重新登录即可获取包含新信息的访问令牌。

groups访问令牌中声明的超额场景详细信息

目前,您可能已编辑应用程序的清单并将"groupMembershipClaims"属性设置为"All""SecurityGroup",以便访问令牌获取groups用户所属的所有组 ID 的声明

在此输入图像描述

为了确保令牌大小不超过 HTTP 标头大小限制,Azure AD 限制其包含在组声明中的 objectId 数量。如果用户属于的组数超过超额限制(SAML 令牌为 150 个,JWT 令牌为 200 个),则 Azure AD 不会在令牌中发出组声明。相反,它在令牌中包含超额声明,指示应用程序查询图形 API 以检索用户的组成员身份。