Azure Active Directory - 用户的组声明不是最新的

Azure Active Directory - user's group claims are not up-to-date

我有一个 .NET Core 网络应用程序,它使用 Azure Active Directory 对用户进行身份验证。我已经在 Azure AD 中配置了应用程序访问权限,然后将其放入我的 Startup class:

//Use Azure Active Directory OAuth 2.0 authentication
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
        .AddAzureAD(options => Configuration.Bind("AzureAd", options)); //AzureAD settings are stored in appsettings.json

这个工作正常,用户可以成功地使用他们的 Azure AD 公司帐户进行身份验证。

但是,在我的一个控制器中,我需要检查 security groups 用户是哪个控制器的成员,以执行一些安全检查。所以我使用这段代码来检查用户是否属于某个安全组:

var groupClaims = User.HasClaim(claim => claim.Type == "group" && claim.Value == mySecurityGroupUid);

这行得通……有点。
问题是 User 对象中 Claim 的集合仅在用户注销 Web 应用程序并重新登录时更新 。如果用户没有明确注销 webapp 并重新登录,则声明列表不会更新。

这是一个大问题,因为这意味着,如果我从安全组中删除了一个用户,那么在用户注销之前,该更改不会反映在我的 webapp 中。这意味着用户可能能够访问他不再被授权访问的数据,因为 webapp 仍然认为他属于旧组。

即使停止并重新部署 Web 应用程序也不会更新组,我发现强制更新组的唯一方法是让用户明确注销 Web 应用程序并重新登录。

所以我的问题是:

我使用此处发布的实现解决了这个问题:

这种方法使用 ram-backed 服务器端对象来存储会话数据,因此不是所有用户信息和声明都在 cookie 中,而是存储在服务器上,cookie 只包含服务器的令牌用于识别会话。这保证了当 webapp 重新启动时会话被清除,解决了我的问题。