假設有這樣一家動物園,這家動物園要門票,門票要從動物園門口的售票室買,購買后,能得到一張紙質的票據。紙很特殊,動物園驗票能通過紙張來判斷門票是不是真的,還能看出你有沒有塗改門票。門票上還有時間,指示什么時候門票到期,只要門票沒有到期,你就可以隨意進出動物園
嗯,這么長個例子,其實和Claim沒什么關系 :)
門票上有什么?我們來假設一下
門票上有,姓名,票價,性別,地址,【等等身份證一類的東東】
好了,我們假設的門票就這樣,從門票的第二行(姓名...)開始,每一行都是一個Claim
有了上面的鋪墊,我們接下來正式介紹下Claim
釋義
Claim 本意有
- vt.聲稱;索取;斷言;需要
- vi.提出要求
- n.索賠;聲稱;(根據權利而提出的)要求;斷言
斷言是比較准確的釋義,另外可以理解成聲明,每一條claim 都代表了一條票據的信息,比如示例票據上的姓名等等。claim 的基本組成是 type
和value
,上面票據中左側的就是type
右面就是value
在 .net core 基礎類庫中是含有Claim的實現類的,它的位置是
System.Security.Claims.Claim
我們看一個真是的claim的例子
{
"sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
這個例子中含有3個claim
- sub subject 主題,往往指Id
- name 就是name
- iat issue at 發出時間
這個例子中的 type 都是 JWT RFC中的標准jwt claim,上面這個例子是一個jwt票據的一部分,而在identity 中,默認使用的是cookie 身份認證,所以使用的不是 jwt 票據,而是加密cookie票據(identity沒有這樣定義,這樣寫是為了和jwt票據區分開),但是票據里面的內容,jwt和 加密cookie都是一樣的都是——“claim”
再回顧下 claim是什么? 就是一條一條的 type-value 鍵值對,里面存儲了身份證明信息
而承載claim的東西就是票據,票據有很多種 jwt 和cookie 都是主流,不過應用場景不一樣,by the way 票據的英文名稱是“token” ,你需要記住它,后續的文章中,我們會學習如何同時使用支持移動后端驗證(jwt token)以及僅僅使用 jwt token