国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解使用JWT實現單點登錄(完全跨域方案)

2024-05-06 15:36:14
字體:
來源:轉載
供稿:網友

首先介紹一下什么是JSON Web Token(JWT)?

官方文檔是這樣解釋的:JSON Web Token(JWT)是一個開放標準(RFC 7519),它定義了一種緊湊且獨立的方式,可以在各方之間作為JSON對象安全地傳輸信息。此信息可以通過數字簽名進行驗證和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公鑰/私鑰對進行簽名。

雖然JWT可以加密以在各方之間提供保密,但只將專注于簽名令牌。簽名令牌可以驗證其中包含的聲明的完整性,而加密令牌則隱藏其他方的聲明。當使用公鑰/私鑰對簽署令牌時,簽名還證明只有持有私鑰的一方是簽署私鑰的一方。

通俗來講,JWT是一個含簽名并攜帶用戶相關信息的加密串,頁面請求校驗登錄接口時,請求頭中攜帶JWT串到后端服務,后端通過簽名加密串匹配校驗,保證信息未被篡改。校驗通過則認為是可靠的請求,將正常返回數據。

什么情況下使用JWT比較適合?

授權:這是最常見的使用場景,解決單點登錄問題。因為JWT使用起來輕便,開銷小,服務端不用記錄用戶狀態信息(無狀態),所以使用比較廣泛; 信息交換:JWT是在各個服務之間安全傳輸信息的好方法。因為JWT可以簽名,例如,使用公鑰/私鑰對兒 - 可以確定請求方是合法的。此外,由于使用標頭和有效負載計算簽名,還可以驗證內容是否未被篡改。

JWT的結構體是什么樣的?

JWT由三部分組成,分別是頭信息、有效載荷、簽名,中間以(.)分隔,如下格式:

xxx.yyy.zzz

header(頭信息)

由兩部分組成,令牌類型(即:JWT)、散列算法(HMAC、RSASSA、RSASSA-PSS等),例如:

{ "alg": "HS256", "typ": "JWT"}

然后,這個JSON被編碼為Base64Url,形成JWT的第一部分。

Payload(有效載荷)

JWT的第二部分是payload,其中包含claims。claims是關于實體(常用的是用戶信息)和其他數據的聲明,claims有三種類型: registered, public, and private claims。

Registered claims: 這些是一組預定義的claims,非強制性的,但是推薦使用, iss(發行人), exp(到期時間), sub(主題), aud(觀眾)等;

Public claims: 自定義claims,注意不要和JWT注冊表中屬性沖突,這里可以查看JWT注冊表

Private claims: 這些是自定義的claims,用于在同意使用這些claims的各方之間共享信息,它們既不是Registered claims,也不是Public claims。

以下是payload示例:

{ "sub": "1234567890", "name": "John Doe", "admin": true}

然后,再經過Base64Url編碼,形成JWT的第二部分;

注意:對于簽名令牌,此信息雖然可以防止篡改,但任何人都可以讀取。除非加密,否則不要將敏感信息放入到Payload或Header元素中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来宾市| 托克托县| 团风县| 五峰| 寻乌县| 白山市| 邯郸县| 九龙城区| 重庆市| 巴彦淖尔市| 呼图壁县| 怀远县| 三明市| 冷水江市| 玛多县| 会昌县| 新竹市| 沙洋县| 汤阴县| 奉化市| 甘南县| 天峻县| 崇义县| 南部县| 溆浦县| 河西区| 台山市| 新余市| 罗田县| 正宁县| 防城港市| 呈贡县| 五台县| 读书| 克拉玛依市| 牙克石市| 天水市| 伽师县| 万安县| 洪湖市| 库尔勒市|