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

问题描述 投票:4回答:1

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

有没有办法用新信息强制刷新令牌?

感谢您的帮助。

谢谢。

azure azure-active-directory claims-authentication
1个回答
1
投票

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

如果您在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

  • user:GetMemberGroups POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups 这只是一个似乎与我相关的,但还有其他类似的API,如memberOf,您可以根据您的要求进行选择。

好处

  1. 您可以绕过用户属于多个组的任何超额场景,因此访问令牌不会为您提供所需的所有组信息。
  2. 您无需强制注销并再次为用户重新登录,以获取具有最新信息的访问令牌。

在访问令牌中覆盖groups声明的场景详细信息

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

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.