[英]How to manage user claims?
我目前正在設計一個使用asp.net核心的系統,我想實現基於聲明的授權,但是一個特殊的部分讓我感到困惑。
在提出索賠時,索賠將包括類型和價值以及可選的發行人。 在處理程序中,可以在確認訪問之前檢查該聲明和發行者。
但是,此發行者不存儲在Identity db中,那么處理程序如何檢查發行者?
我誤解了這一切是如何運作的嗎? 我的理解是,用戶提出某種類型的聲明,他們的聲明屬於某個值,而發行者是聲明類型的驗證者,實際上具有該用戶的該值。
處理程序將檢查值並可能檢查發布者,但是當db不存儲它時它不能。 我不明白發行人的意思。
我希望用戶擁有一系列聲明,包括誰/什么驗證這些聲明以及應用程序,以便隨時驗證這些聲明。
請幫我理解。
我已經測試了這個:
我唯一可以想到的是,一旦聲明被添加到數據庫中,它就被認為是微軟驗證的,現在由代表微軟的應用程序(Local Authority)持有。
如果那是真的那么:
我希望可以選擇去那個發行人並隨時檢查索賠,這意味着發行人可以撤銷/使索賠無效。 該員工聲稱他們在Microsoft擁有員工編號,並且最初Microsoft會對此進行驗證。 一段時間后,微軟將員工踢出去,他們的系統將他刪除。 每次用戶登錄時,應用程序都應該能夠與Microsoft核實,以查看聲明是否有效。 在這種情況下,它將不再有效。
我有點生氣嗎?
當你從我的博客鏈接到這個問題時,這里發布這個,這可能對某人有用
我認為你對於索賠的性質略有誤解,我可以理解術語。 您似乎將“聲明”視為用戶“自稱”他們具有某種屬性,並且您想要檢查這是否屬實。
這不是索賠在這里工作的方式。 聲明基本上是用戶的“屬性”。 在使用角色的舊方式中,用戶將屬於特定數量的角色。 這些只是用戶現在擁有的“屬性”,因此更通用。 用戶可以具有與他們所處的角色相對應的多個聲明。
在身份驗證期間檢查用戶的身份,此時您將用戶擁有的
Claims
集分配給ClaimsIdentity
對象。 這是您從數據庫中獲取聲明的要點,並確保它們只獲得它們應具有的聲明。 如果您需要某人驗證聲明,那么您需要在此之外進行整個過程。 只有已經確認的索賠才應添加到ClaimsIdentity
。現在,您可以在
CookieAuthenticationMiddleware
上處理一個事件,以便在后續名為ValidatePrincipal的請求中加載安全票證時對其進行驗證,但我不確定這實際上是否是您所需要的。
以及隨后的回復:
感謝您的答復。 我現在明白,這些聲明一旦進入數據庫就會得到有效驗證。 我猜他們可以從數據庫中刪除,作為撤銷聲明的一種方式。
但是,我認為,正如您所建議的那樣,最好的方法是將此系統放在外面,它只是在需要時提供索賠。 設計是應用程序將擁有不同類型的實體的帳戶,並且帳戶將能夠提出索賠,例如“我是父母”。 家長會尋求授權帳戶來驗證這一點。 這可能要求授權帳戶持有人在驗證之前實際查看一些真實的文檔。 其他索賠可能會改變。 例如,具有父母責任的父母需要更多的驗證,但也可能在現實世界中失去父母的責任,因此需要提供撤銷聲明的工具。
因此,我認為設計應該是在優秀文章之后使用具有Authorize屬性的聲明系統,但是有一個單獨的系統允許驗證和撤消聲明系統的Feed。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.