我有一个使用带有角色/声明身份验证/授权的Azure AD的简单ASP.Net Web-APP。基本上,应用会为用户检查IsinRole(),然后根据返回的内容来访问Web应用的区域。我们正在Azure AD中使用“安全组”。场景是一个用户属于Group1,登录到Web应用程序后,他可以访问Group1区域,现在后端的管理员将用户也添加到了Group2,而无需用户注销并重新登录门户我们希望他的令牌也包含这个新添加的Group2。 无论如何,有没有刷新令牌以在没有用户注销和登录应用程序的情况下为该用户令牌添加额外的group2的问题?
有什么方法可以强制使用新信息刷新令牌?
感谢您的帮助。
谢谢。
答案 0 :(得分:1)
刷新令牌以获取新的访问令牌
一种方法可能是使用 Refresh Token
来获取新的 Access Token
(如果您在您的Web应用程序。
您可以在此处详细了解-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"
,以便访问令牌获得具有用户所属的所有组ID的groups
声明
为确保令牌大小不超过HTTP标头大小限制, Azure AD限制了它包含在组声明中的objectId的数量。如果用户属于超过超出限制的组的更多成员(SAML令牌为150,JWT令牌为200),则Azure AD不会在令牌中发出组声明。相反,它在令牌中包含一个超额声明,该声明指示应用程序查询Graph API以检索用户的组成员身份。