今天我們來聊一聊關(guān)于JWT授權(quán)的事情。
成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元桂陽做網(wǎng)站,已為上家服務(wù),為桂陽各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
JWT:Json Web Token。顧名思義,它是一種在Web中,使用Json來進行Token授權(quán)的方案。
既然沒有找好密碼,token是如何解決信任問題的呢?
解決信任問題,只需要解決兩個問題即可:
token是不是來自我信任的機構(gòu)頒發(fā)
token中的信息是否被篡改
對于第一個問題而言,確認(rèn)token確實是由被信任的第三方頒發(fā)的,一般都是通過加密算法來建立信任,頒發(fā)時使用密鑰進行加密,如果能夠?qū)用軆?nèi)容進行正常解密說明token來自信任方。常用的加密算法分為:
對稱可逆加密:使用同一個秘鑰來加密解密,如果token能解密就能證明來源,秘鑰不對外公開
非對稱可逆加密:使用一組秘鑰對(私鑰加密+公鑰解密),如果token能使用公鑰進行解密就能證明來源,公鑰與私鑰之間互相不可推算
優(yōu)缺點:
對稱可逆加密效率高,速度快,但是由于對稱可逆加密使用的是同一個秘鑰,所以必須向解密的應(yīng)用提供秘鑰,相對而言不安全,所以一般只用于內(nèi)部應(yīng)用之間。
非對稱可逆加密速度相對慢一些,但是加密時通過私鑰加密而解密時只需要提供公鑰即可,所以用于對外提供加密機制更加安全可靠,所以多用于向第三方提供加密服務(wù)時使用。
算法舉例:
HS256
HS256 (帶有 SHA-256 的 HMAC 是一種對稱算法, 雙方之間僅共享一個 密鑰。由于使用相同的密鑰生成簽名和驗證簽名, 因此必須注意確保密鑰不被泄密。
2 RS256
RS256 (采用SHA-256 的 RSA 簽名) 是一種非對稱算法, 它使用公共/私鑰對: 標(biāo)識提供方采用私鑰生成簽名, JWT 的使用方獲取公鑰以驗證簽名。由于公鑰 (與私鑰相比) 不需要保護, 因此大多數(shù)標(biāo)識提供方使其易于使用方獲取和使用 (通常通過一個元數(shù)據(jù)URL)。
JWT格式說明
JWT令牌格式 | 作用 | |
Header | 頭 | { "alg": "HS256", "typ": "JWT"} |
Payload | 有效載荷 | 使用base64進行序列化,任何人都可以讀到,所以不要包含敏感信息 |
Signature | 簽名 |
防止抵賴-防止篡改,一旦頭和有效載荷有內(nèi)容被篡改,則生成簽名部分必將與原內(nèi)容不同 =HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) |
JWT如何解決信任問題的呢?
將簽名部分使用秘鑰進行解密,如果可以正常解開,說明令牌來自信任方頒發(fā),將解密后的內(nèi)容與JWT的頭部和有效載荷的base64編碼內(nèi)容對比是否一致,如果一致,說明令牌未被篡改。也就解決了token信任的第二個問題。
算法實現(xiàn):
下面是使用上述的兩種加密算法生成的jwt
HS256算法實現(xiàn)
1 public string GetToken(UserInfoDTO userInfo) 2 { 3 string secretKey = _configuration["SercetKey"]; 4 var signingCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)), SecurityAlgorithms.HmacSha256); 5 6 var claims = new Claim[] { 7 new Claim("id",userInfo.Id.ToString()), 8 new Claim("age",userInfo.Age.ToString()), 9 new Claim("name",userInfo.Name), 10 new Claim("mobile",userInfo.Mobile), 11 new Claim("email",userInfo.EMail), 12 new Claim("role",userInfo.Role), 13 }; 14 15 var token = new JwtSecurityToken( 16 issuer: _configuration["Issuer"], //發(fā)行人 17 audience: _configuration["Audience"], //受眾人 18 claims: claims, 19 expires: DateTime.UtcNow.AddMinutes(2),//60分鐘有效期 20 notBefore: DateTime.UtcNow.AddMinutes(1),//1分鐘后有效 21 signingCredentials: signingCredentials); 22 string returnToken = new JwtSecurityTokenHandler().WriteToken(token); 23 return returnToken; 24 }
當(dāng)前標(biāo)題:JWT中token的理解
瀏覽路徑:http://chinadenli.net/article42/dsoiohc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、網(wǎng)站制作、服務(wù)器托管、網(wǎng)站維護、App開發(fā)、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)