簡體   English   中英

用戶登錄時,IdentityServer3需要角色(作為附加憑據)

[英]IdentityServer3 requiring a role when the user logs in (as additional credential)

我有一個系統,如果用戶以“只讀”角色以Joe身份登錄,那么他將僅被授予讀取內容的權限(顯然),但是如果他以“角色” Administrator身份以Joe身份登錄,則他將具有訪問權限履行行政職能。 但是,如果他希望從“只讀”角色更改為“管理員”角色,則我希望他必須重新登錄,以便他可以潛在地在顯示屏或其他內容上以“只讀”身份登錄帳戶,而不必擔心有人劫持了他的管理員權限。

現在,我還需要能夠通過隱式授權登錄Web客戶端,或者通過代碼授權登錄另一台服務器,並使該服務也能夠使用相同的角色(如果仍然需要Joe以特定角色登錄,他尚未通過身份驗證。)

現在,我一直在嘗試使用IdentityServer3進行此操作,但似乎無法使角色信息成為用戶身份驗證的一部分,因此我嘗試在令牌請求中添加一個角色的acr_value:ReadOnly(然后變成身份驗證請求) (如果用戶未登錄),但是如果他們使用ReadOnly的acr_value登錄,然后再次使用Adminstrator的acr_value登錄,則由於他們已經通過用戶身份驗證,因此只能讓他們登錄。

關於我應該使用什么代替我正在做的事情的任何提示,或者在這個OAuth2 / OpenID Connect世界中我可能會完全脫離基礎嗎?

我終於想通了,所以對於其他可能想在這里做同樣事情的人來說,我就是這樣做的。

首先,您構建了一個自定義UserService,該服務在acr_values中查找有關其他信息。 然后在AuthenticateResult中為該額外信息創建聲明。 其次,您必須重寫ClaimProvider才能在第一步生成的令牌中包含您的自定義聲明集。 接下來,您需要一個CustomRequestValidator,以檢查是否設置了新的acr_value,而不是與當前使用的令牌中存儲的acr_value相比。 如果已更改,並且您想強制用戶重新認證,則可以設置“ request.PromptMode =“ login”;“ 就是這樣,通過這一系列步驟,我現在可以使用3個值(用戶名,密碼和角色)對用戶進行身份驗證,如果角色請求更改,我可以要求他們重新進行身份驗證。

暢游作品。

暫無
暫無

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

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