簡體   English   中英

如何管理用戶聲明?

[英]How to manage user claims?

我目前正在設計一個使用asp.net核心的系統,我想實現基於聲明的授權,但是一個特殊的部分讓我感到困惑。

在提出索賠時,索賠將包括類型和價值以及可選的發行人。 在處理程序中,可以在確認訪問之前檢查該聲明和發行者。

但是,此發行者不存儲在Identity db中,那么處理程序如何檢查發行者?

我誤解了這一切是如何運作的嗎? 我的理解是,用戶提出某種類型的聲明,他們的聲明屬於某個值,而發行者是聲明類型的驗證者,實際上具有該用戶的該值。

處理程序將檢查值並可能檢查發布者,但是當db不存儲它時它不能。 我不明白發行人的意思。

我希望用戶擁有一系列聲明,包括誰/什么驗證這些聲明以及應用程序,以便隨時驗證這些聲明。

請幫我理解。

我已經測試了這個:

  1. 使用帶有Identity的asp.net核心應用程序。
  2. 注冊用戶。
  3. 向包含類型,值和頒發者的用戶添加聲明。 (例如,EmployeeNumber,312,Microsoft。
  4. 在控制器/操作上添加[Authorize(Policy =“MicrosoftEmployeesOnly”)]以限制訪問。
  5. 使用要求將策略添加到StartUp.cs中的服務中。
  6. 添加需求代碼,該代碼具有檢查用戶具有類型EmployeeNumber的聲明的處理程序,具有值並且由Microsoft發布。
  7. 登錄和用戶聲明將從db加載到標識中。
  8. 處理程序將無法驗證用戶,因為發行者(Microsoft)已丟失,現在只是說Local Authority。

我唯一可以想到的是,一旦聲明被添加到數據庫中,它就被認為是微軟驗證的,現在由代表微軟的應用程序(Local Authority)持有。

如果那是真的那么:

  1. 為什么要在任何處理程序中檢查發行者?
  2. 你如何撤銷索賠?

我希望可以選擇去那個發行人並隨時檢查索賠,這意味着發行人可以撤銷/使索賠無效。 該員工聲稱他們在Microsoft擁有員工編號,並且最初Microsoft會對此進行驗證。 一段時間后,微軟將員工踢出去,他們的系統將他刪除。 每次用戶登錄時,應用程序都應該能夠與Microsoft核實,以查看聲明是否有效。 在這種情況下,它將不再有效。

我有點生氣嗎?

當你從我的博客鏈接到這個問題時這里發布這個,這可能對某人有用

我認為你對於索賠的性質略有誤解,我可以理解術語。 您似乎將“聲明”視為用戶“自稱”他們具有某種屬性,並且您想要檢查這是否屬實。

這不是索賠在這里工作的方式。 聲明基本上是用戶的“屬性”。 在使用角色的舊方式中,用戶將屬於特定數量的角色。 這些只是用戶現在擁有的“屬性”,因此更通用。 用戶可以具有與他們所處的角色相對應的多個聲明。

在身份驗證期間檢查用戶的身份,此時您將用戶擁有的Claims集分配給ClaimsIdentity對象。 這是您從數據庫中獲取聲明的要點,並確保它們只獲得它們應具有的聲明。 如果您需要某人驗證聲明,那么您需要在此之外進行整個過程。 只有已經確認的索賠才應添加到ClaimsIdentity

現在,您可以在CookieAuthenticationMiddleware上處理一個事件,以便在后續名為ValidatePrincipal的請求中加載安全票證時對其進行驗證,但我不確定這實際上是否是您所需要的。

以及隨后的回復:

感謝您的答復。 我現在明白,這些聲明一旦進入數據庫就會得到有效驗證。 我猜他們可以從數據庫中刪除,作為撤銷聲明的一種方式。

但是,我認為,正如您所建議的那樣,最好的方法是將此系統放在外面,它只是在需要時提供索賠。 設計是應用程序將擁有不同類型的實體的帳戶,並且帳戶將能夠提出索賠,例如“我是父母”。 家長會尋求授權帳戶來驗證這一點。 這可能要求授權帳戶持有人在驗證之前實際查看一些真實的文檔。 其他索賠可能會改變。 例如,具有父母責任的父母需要更多的驗證,但也可能在現實世界中失去父母的責任,因此需要提供撤銷聲明的工具。

因此,我認為設計應該是在優秀文章之后使用具有Authorize屬性的聲明系統,但是有一個單獨的系統允許驗證和撤消聲明系統的Feed。

暫無
暫無

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

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