2017-05-25 57 views
0

我希望能夠打開和關閉我的網站的某個區域的保護。我使用IdentityServer來填充MVC應用程序中的聲明,從而確定訪問功能。如何讓IdentityServer 4在未登錄的情況下更新聲明?

例如,我有一個類型爲'video_viewer_role'的索賠,當指定時,它確定當前的身份是否可以在網站上觀看視頻。我的想法是,我可以通過索賠來開啓和關閉此功能,包括匿名用戶。

所以,我想要的是我的控制器操作調用IdentityServer並詢問當前用戶是否有索賠,但沒有觸發認證過程。因此,如果用戶未通過身份驗證,則會根據支持身份服務器的聲明存儲中設置的內容獲取「video_viewer_role」的最新聲明值。

這可能嗎?

回答

3

您應該閱讀此... https://leastprivilege.com/2016/12/16/identity-vs-permissions/,然後沿着混合權限身份的路線走得太遠。

理想情況下,您不應該提供關於權限的聲明('can_view_video'),特別是如果這將通過會話過程發生變化。理賠應該模擬用戶的身份,而不是他們可以做的事情。然後,靠近您的受保護資源,您可以使用該身份驗證用戶是否有權執行他們正在嘗試執行的操作(即查看視頻)。

編輯: 它仍然聽起來像索賠是不正確的機制,恕我直言。聲明模擬了用戶的身份,因此嘗試爲匿名用戶使用聲明是沒有意義的......唯一可以說的是他們是匿名的。

你說你打算'打開/關閉功能',大概是通過數據庫,所以爲什麼不讓權限檢查機制檢查你的數據庫?您可以爲您的控制器創建一個屬性('RequiresVideoViewerPermissions'),它會檢查您的數據庫是否限制了您的視頻訪問。例如,您可以在數據庫中設置一個名爲「VideoViewerRequiredRole」的設置,然後將其值設置爲一個角色,或者如果您希望每個人都能查看它,則只需將其設置爲空。舉例來說,您登錄的用戶可能會扮演'MyAppUser'角色,您的管理員'MyAppAdmin'等角色。

這會將權限從權限中移除,並且允許您控制權限以驗證用戶和/或取決於你如何設置匿名用戶。

+0

Hey Mashton。感謝您的迴應。這並不意味着會話期間「can_view_video」標誌將會改變。相反,我希望標誌能夠切換匿名用戶是否可以訪問特定資源。我可能想爲用戶打開和關閉一個功能,具體取決於它的成功程度。我真正想要的是能夠向匿名用戶授予索賠! –

+0

我已更新該問題以提供一點清晰度 –

+0

請參閱編輯以回答 – Mashton

相關問題