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 应用程序并重新登录。
所以我的问题是:
- 这是预期的行为吗?还是我做错了什么?
- 有没有办法强制声明列表与 Azure AD“同步”?
- 如果没有,有没有一种方法可以在我的 webapp 停止并重新启动时强制注销所有用户,这样我就知道所有用户都被迫重新登录,这反过来又会更新他们的声明?
我使用此处发布的实现解决了这个问题:
这种方法使用 ram-backed 服务器端对象来存储会话数据,因此不是所有用户信息和声明都在 cookie 中,而是存储在服务器上,cookie 只包含服务器的令牌用于识别会话。这保证了当 webapp 重新启动时会话被清除,解决了我的问题。
我有一个 .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 应用程序并重新登录。
所以我的问题是:
- 这是预期的行为吗?还是我做错了什么?
- 有没有办法强制声明列表与 Azure AD“同步”?
- 如果没有,有没有一种方法可以在我的 webapp 停止并重新启动时强制注销所有用户,这样我就知道所有用户都被迫重新登录,这反过来又会更新他们的声明?
我使用此处发布的实现解决了这个问题:
这种方法使用 ram-backed 服务器端对象来存储会话数据,因此不是所有用户信息和声明都在 cookie 中,而是存储在服务器上,cookie 只包含服务器的令牌用于识别会话。这保证了当 webapp 重新启动时会话被清除,解决了我的问题。