我有一个简单的 ASP.Net Web-APP,使用 Azure AD 和角色/声明身份验证/授权。基本上,应用程序会检查用户的 IsinRole(),然后根据返回的内容,他可以访问网络应用程序的区域。我们在 Azure AD 中使用安全组。这里的场景是用户属于 Group1,登录网络应用程序后他可以访问 Group1 区域,现在后端管理员将用户添加到 Group2,我们想要的是用户无需注销并重新登录门户我们希望他的令牌也包含这个新添加的 Group2。
无论如何,是否可以刷新令牌,以便为该用户令牌添加额外的 group2,而无需他注销并进入应用程序?
有什么办法可以用新信息强制刷新令牌吗?
感谢你的帮助。
谢谢。
刷新令牌以获取新的访问令牌
一种方法可能是使用Refresh Token
获得一个新的Access Token
如果您在 Web 应用程序中使用授权代码授权等授权。
你可以在这里读更多关于它的内容 -刷新访问令牌 https://learn.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code#refreshing-the-access-tokens
您的应用程序将需要决定何时获取新的访问令牌。因此,当它意识到后端组件/管理员已更新组成员资格时,它就可以执行此操作。
现在,您尚未提及的一个单独主题是用户已登录的 Web 应用程序如何了解此类事件,但诸如 SingalR 通知之类的内容可能会有所帮助。
注意事项:
替代方法(而不是像您提到的那样尝试使用新信息强制刷新令牌)
If groups
声明就是您所追求的,然后利用Microsoft Graph API
获取有关用户所属安全组的信息,而不是仅查看访问令牌。
您的应用程序代码可以随时再次调用 Microsoft Graph API 以获取新的成员资格详细信息,即按照您的示例的组 1 和组 2(当它知道组成员资格已由后端组件/管理员更新时)。 SignalR 或其他一些通知您的应用程序此类更改的方式也与此相关。
相关的 Microsoft Graph API
-
用户:获取会员组 https://learn.microsoft.com/en-us/graph/api/user-getmembergroups?view=graph-rest-1.0
POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
这只是一个与我相关的 API,但还有其他类似的 API,例如memberOf https://learn.microsoft.com/en-us/graph/api/user-list-memberof?view=graph-rest-1.0您可以根据您的要求进行选择。
优点
您可以绕过用户属于多个组的任何超额情况,因此访问令牌不会以任何方式为您提供所需的所有组信息。
您无需强制用户注销并重新登录即可获取包含新信息的访问令牌。
超额场景详细信息groups
访问令牌中的声明
目前您可能已经编辑了应用程序的清单并设置"groupMembershipClaims"
财产给"All"
or "SecurityGroup"
这样访问令牌就得到了groups
声明用户所属的所有组 ID
为了确保令牌大小不超过 HTTP 标头大小限制,Azure AD 限制其包含在组声明中的 objectId 数量。如果用户属于的组数超过超额限制(SAML 令牌为 150 个,JWT 令牌为 200 个),则 Azure AD 不会在令牌中发出组声明。相反,它在令牌中包含超额声明,指示应用程序查询图形 API 以检索用户的组成员身份。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)