簡體   English   中英

Azure Active Directory - 用戶的組聲明不是最新的

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

我有一個.NET Core webapp,它使用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 object 中的Claim集合僅在用戶注銷 web 應用程序並重新登錄時更新 如果用戶沒有明確退出 webapp 並重新登錄,則聲明列表不會更新。

這是一個大問題,因為這意味着,例如,如果我從安全組中刪除了一個用戶,那么在用戶注銷之前,該更改將不會反映在我的 webapp 中。 這意味着用戶可能能夠訪問他不再被授權訪問的數據,因為 webapp 仍然認為他屬於舊組。

即使停止並重新部署 web 應用程序也不會更新組,我發現強制組更新的唯一方法是讓用戶明確注銷 web 應用程序並重新登錄。

所以我的問題是:

  • 這是預期的行為嗎? 還是我做錯了什么?
  • 有沒有辦法強制聲明列表與 Azure AD “同步”?
  • 如果沒有,有沒有辦法在我的 web 應用程序停止並重新啟動時強制注銷所有用戶,所以我知道所有用戶都被迫重新登錄,這反過來又會更新他們的聲明?

我通過使用此處發布的實現解決了這個問題:

https://stackoverflow.com/a/51210553/300741

這種方法使用 ram 支持的服務器端 object 來存儲 session 數據,因此不是所有用戶信息和聲明都在 cookie 中,而是存儲在服務器上,並且 cookie 僅包含服務器用於識別 Z21D6F40CFZE51E5121 的令牌. 這保證了當 webapp 重新啟動時會話被清除,解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM