摘要:一旦用戶登錄,后續每個請求都將包含,允許用戶訪問該令牌允許的路由服務和資源。單點登錄是現在廣泛使用的的一個特性,因為它的開銷很小,并且可以輕松地跨域使用。用于在同意使用它們的各方之間共享信息,并且不是注冊的或公開的聲明。
1.JSON Web Token是什么
? ? JSON Web Token (JWT)是一個開放標準(RFC 7519),它定義了一種緊湊的、自包含的方式,用于作為JSON對象在各方之間安全地傳輸信息。該信息可以被驗證和信任,因為它是數字簽名的。
2.JSON Web Token有什么用下列場景中使用JSON Web Token是很有用的:
Authorization (授權) : 這是使用JWT的最常見場景。一旦用戶登錄,后續每個請求都將包含JWT,允許用戶訪問該令牌允許的路由、服務和資源。單點登錄是現在廣泛使用的JWT的一個特性,因為它的開銷很小,并且可以輕松地跨域使用。
Information Exchange (信息交換) : 對于安全的在各方之間傳輸信息而言,JSON Web Tokens無疑是一種很好的方式。因為JWTs可以被簽名,例如,用公鑰/私鑰對,你可以確定發送人就是它們所說的那個人。另外,由于簽名是使用頭和有效負載計算的,您還可以驗證內容沒有被篡改。
JSON Web Token由三部分組成,它們之間用圓點(.)連接。這三部分分別是:
Header Payload Signature
因此,一個典型的JWT看起來是這個樣子的:
xxxxx.yyyyy.zzzzz
Header
header典型的由兩部分組成:token的類型(“JWT”)和算法名稱(比如:HMAC SHA256或者RSA等等)。
例如:
然后,用Base64對這個JSON編碼就得到JWT的第一部分
?
Payload
JWT的第二部分是payload,它包含聲明(要求)。聲明是關于實體(通常是用戶)和其他數據的聲明。聲明有三種類型: registered, public 和 private。
Registered claims : 這里有一組預定義的聲明,它們不是強制的,但是推薦。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
Public claims : 可以隨意定義。
Private claims : 用于在同意使用它們的各方之間共享信息,并且不是注冊的或公開的聲明。
對payload進行Base64編碼就得到JWT的第二部分
注意,不要在JWT的payload或header中放置敏感信息,除非它們是加密的。
?
Signature
為了得到簽名部分,你必須有編碼過的header、編碼過的payload、一個秘鑰,簽名算法是header中指定的那個,然對它們簽名即可。
例如:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
簽名是用于驗證消息在傳遞過程中有沒有被更改,并且,對于使用私鑰簽名的token,它還可以驗證JWT的發送方是否為它所稱的發送方。
典型模塊如下:
// Header { "alg": "HS256", "typ": "JWT" } // Payload { // reserved claims "sub": "1234567890", "name": "John Doe", "iat": "1516239022" } // $Signature HS256(Base64(Header) + "." + Base64(Payload), "自定義密鑰kyey" ) // JWT JWT = Base64(Header) + "." + Base64(Payload) + "." + $Signature4.具體實現
public static String createJWT(Object subject, long ttlMillis) { //設置簽名算法為HS256 SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; long nowMillis = System.currentTimeMillis(); Date now = new Date(nowMillis); JwtBuilder builder = Jwts.builder().setId("jwt").setIssuedAt(now).setSubject(JSONObject.toJSONString(subject)).signWith(signatureAlgorithm, secretKey); //設置過期時間 if (ttlMillis >= 0L) { long expMillis = nowMillis + ttlMillis; Date exp = new Date(expMillis); builder.setExpiration(exp); } //生成jwt return builder.compact(); }
具體compact()方法即根據傳入的參數進行處理? 最終得到jwt的字符串
eyJhbGci**I1NiJ9.eyJqdGkiOiJqd3QiL**DY2NTMxOH0.x9fNW**2fe4ht
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74494.html
摘要:今天我們來結合實例給大家講述的實戰應用,就是如何使用前端與后端實現用戶登錄鑒權認證的過程。只用了一個串,建立前后端的驗證的數據傳遞,實現了有效的登錄鑒權過程。 今天我們來結合實例給大家講述JWT(Json Web Token)的實戰應用,就是如何使用前端Axios與后端PHP實現用戶登錄鑒權認證的過程。 文中涉及的重要知識點: axios異步請求:axios-基于Promise的HTT...
摘要:一前言,是為了在網絡環境間傳遞聲明而執行的一種基于的開放標準。用戶簽發添加中間件校驗判斷是否可用獲取解密,獲取用戶名和認證失敗中添加處理此處在開發時需要過濾掉登錄接口,否則會導致驗證永遠失敗。前端處理前端開發使用的是,發送請求使用的是。 一、前言 JWT(JSON Web Token),是為了在網絡環境間傳遞聲明而執行的一種基于JSON的開放標準(RFC 7519)。 JWT不是一個新...
摘要:登錄認證幾乎是任何一個系統的標配,系統客戶端等,好多都需要注冊登錄授權認證。假設我們開發了一個電商平臺,并集成了微信登錄,以這個場景為例,說一下的工作原理。微信網頁授權是授權碼模式的授權模式。 登錄認證幾乎是任何一個系統的標配,web 系統、APP、PC 客戶端等,好多都需要注冊、登錄、授權認證。 場景說明 以一個電商系統,假設淘寶為例,如果我們想要下單,首先需要注冊一個賬號。擁有了賬...
閱讀 2786·2021-11-22 14:45
閱讀 2925·2021-09-10 11:26
閱讀 3231·2021-09-07 10:18
閱讀 2219·2019-08-30 14:08
閱讀 617·2019-08-29 12:22
閱讀 1393·2019-08-26 13:48
閱讀 2535·2019-08-26 10:24
閱讀 1150·2019-08-23 18:35