5

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

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

感谢你的帮助。

谢谢你。

4

1 回答 1

3

刷新 Token 获取新的 Access Token

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

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

您的应用程序将需要决定何时获取新的访问令牌。因此,当它知道后端组件/管理员已更新组成员身份时,它可以这样做。

现在,您没有过多提及的另一个主题是,您的 Web 应用程序将如何在用户已经登录的情况下了解此类事件,但像 SingalR 通知之类的东西可能会有所帮助。

注意事项:

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

  • 刷新令牌必须安全保存

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


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

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

根据您的示例,您的应用程序代码可以随时再次调用 Microsoft Graph API 以获取新的成员资格详细信息,即组 1 和组 2(当它知道组成员资格已由后端组件/管理员更新时)。SignalR 或其他通知您的应用此类更改的方式在这里也很重要。

相关的 Microsoft Graph API

  • 用户:GetMemberGroups

    POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
    

    这只是与我相关的一个,但还有其他类似的 API,例如memberOf,您可以根据自己的要求进行选择。

优点

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

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

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

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

在此处输入图像描述

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

于 2019-04-09T23:21:43.397 回答