我有一个简单的ASP.Net Web-APP使用Azure AD与角色/声明身份验证/授权。基本上app为用户检查IsinRole(),然后根据返回的内容,他可以访问web-app的区域。我们在Azure AD中使用安全组。这里的场景是用户属于Group1,登录到web-app后,他可以访问Group1区域,现在后端的Administrator会将用户添加到Group2以及我们想要的是没有用户注销并重新登录门户我们希望他的令牌也包含这个新添加的Group2。无论如何都要刷新令牌以便为该用户令牌添加额外的group2而无需他在应用程序中注销?
有没有办法用新信息强制刷新令牌?
感谢您的帮助。
谢谢。
刷新令牌以获取新的访问令牌
如果您在Web应用程序中使用授权代码授权等授权,则可以使用Refresh Token
获取新的Access Token
。
你可以在这里阅读更多相关信息 - Refreshing the Access Tokens
您的应用程序需要决定何时获取新的访问令牌..因此,当它知道后端组件/管理员已更新组成员身份时,它可以这样做。
现在,您还没有提到的另一个主题是您的Web应用程序如何在用户已登录的情况下,了解此类事件,但类似于SingalR通知可能会有所帮助。
注意事项:
groups
声称的情况下,可能存在过度使用场景,其中单独访问令牌可能无济于事。替代方法(而不是像你提到的那样用新信息强制刷新令牌)
如果groups
声称是您所追求的,那么请使用Microsoft Graph API
获取有关用户所属安全组的信息,而不是只查看访问令牌。
您的应用程序代码可以随时再次调用Microsoft Graph API以获取新的成员资格详细信息,即根据您的示例获得组1和组2(当它知道组成员身份已由后端组件/管理员更新时)。 SignalR或其他一些通知您的应用程序此类更改的方式也与此相关。
相关的Microsoft Graph API
POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
这只是一个似乎与我相关的,但还有其他类似的API,如memberOf,您可以根据您的要求进行选择。好处
在访问令牌中覆盖groups
声明的场景详细信息
目前您可能已经编辑了应用程序的清单并将"groupMembershipClaims"
属性设置为"All"
或"SecurityGroup"
,以便访问令牌获得groups
声明,其中包含用户所属的所有组ID
若要确保令牌大小不超过HTTP标头大小限制,Azure AD会限制它在组声明中包含的objectId的数量。如果用户是超出超出限制的组的成员(对于SAML令牌为150,对于JWT令牌为200),则Azure AD不会在令牌中发出组声明。相反,它在令牌中包含一个超额声明,指示应用程序查询Graph API以检索用户的组成员身份。