<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          什么是JWT?現(xiàn)在還有人不知道JWT嗎?

          共 1933字,需瀏覽 4分鐘

           ·

          2023-08-21 19:43


          JWT介紹


          JWT概念

          JWT , 全寫JSON Web Token, 是開放的行業(yè)標(biāo)準(zhǔn)RFC7591,用來實(shí)現(xiàn)端到端安全驗(yàn)證.

          簡單來說, 就是通過一些算法對加密字符串和JSON對象之間進(jìn)行加解密。

          JWT加密JSON,保存在客戶端,不需要在服務(wù)端保存會話信息,可以應(yīng)用在前后端分離的用戶驗(yàn)證上,后端對前端輸入的用戶信息進(jìn)行加密產(chǎn)生一個令牌字符串, 前端再次請求時附加此字符串,后端再使用算法解密。

          JWT流程:

          e965ffdf6d45a1be58cd3370172e2c5b.webp

          JWT的構(gòu)成

          JWT字符串:一段加密的JSON字符串。

          包含了三類信息

          • Header頭部:Token類型和加密算法。加密算法常見的有MD5、SHA、HMAC( Hash Message Authentication Code)。
          • PayLoad負(fù)載:存放有效信息,包括

          標(biāo)準(zhǔn)的聲明,類似開發(fā)語言總的關(guān)鍵字。包括

              iss(Issuser) - 簽發(fā)者
          sub Subject 面向主體
          aud Audience 接收方
          exp Expiration time 過期時間戳
          nbf Not Before, 開始生效時間戳
          iat(Issued at) 簽發(fā)時間
          jti(JWT ID): 唯一標(biāo)識

          公共的聲明:一般添加業(yè)務(wù)相關(guān)的必要信息,因?yàn)榭山饷?,不建議敏感信息。

          私有的聲明:提供者和消費(fèi)者共同定義的聲明,Base64對稱解密,不建議敏感信息

          Signature簽證

          簽證信息包括三部分:

          Base64加密的header

          Base64加密的payload

          secret-密鑰 使用header中聲明的加密算法對Header和payload的加密連接字符串進(jìn)行加鹽secret組合加密。密鑰保存在服務(wù)端,服務(wù)端根據(jù)密鑰進(jìn)行解密驗(yàn)證。

          JWT與開發(fā)語言

          JWT只是一個標(biāo)準(zhǔn) 可以通過不過的開發(fā)語言實(shí)現(xiàn),包括Java,.NET, Python,Node Js, JavaScript,Perl, Ruby,Go等。同一種語言,不同的開發(fā)者提供了多種實(shí)現(xiàn)庫,以Java語言為例有java-jwt、?jose4j、nimbus-jose-jwt、jjwt

          JWT官網(wǎng)

          https://jwt.io/

          這個網(wǎng)站提供了在線的基于不同算法的字符串和JSON對象的轉(zhuǎn)換工具,同時也收集了不同語言的多種實(shí)現(xiàn)庫。23 種設(shè)計(jì)模式實(shí)戰(zhàn)(很全)分享一下。

          java-jwt

          java-jwt是Java語言中推薦的JWT實(shí)現(xiàn)庫,使用Maven導(dǎo)入如下:

              <dependency>
           <groupId>com.auth0</groupId>
           <artifactId>java-jwt</artifactId>
           <version>3.8.3</version>
          </dependency>

          產(chǎn)生加密Token

              String token = JWT.create()
            .withExpiresAt(newDate(System.currentTimeMillis()))  //設(shè)置過期時間
            .withAudience("user1") //設(shè)置接受方信息,一般時登錄用戶
            .sign(Algorithm.HMAC256("111111"));  //使用HMAC算法,111111作為密鑰加密

          解密Token獲取負(fù)載信息并驗(yàn)證Token是否有效

              String userId = JWT.decode(token).getAudience().get(0);
          Assertions.assertEquals("user1", userId);
          JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("111111")).build();
          jwtVerifier.verify(token);


          瀏覽 30
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人精品一区二区婷婷 | 国产一线二线在线观看 | 51妺嘿嘿午夜福利 | 天天干天天色天天射 | 一道无码 |