<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>

          java-jwt這個庫沒用過吧?

          共 1925字,需瀏覽 4分鐘

           ·

          2021-11-15 09:48

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術/資料共享?
          關注


          閱讀本文大概需要 2.8 分鐘。

          來自:https://blog.csdn.net/oscar999/article/details/102728303

          JWT介紹

          JWT概念

          JWT , 全寫JSON Web Token, 是開放的行業(yè)標準RFC7591,用來實現(xiàn)端到端安全驗證.
          簡單來說, 就是通過一些算法對加密字符串和JSON對象之間進行加解密。
          JWT加密JSON,保存在客戶端,不需要在服務端保存會話信息。,可以應用在前后端分離的用戶驗證上,后端對前端輸入的用戶信息進行加密產生一個令牌字符串, 前端再次請求時附加此字符串,后端再使用算法解密。

          JWT流程:


          JWT的構成

          JWT字符串:一段加密的JSON字符串。
          包含了三類信息
          • Header頭部:Token類型和加密算法。加密算法常見的有MD5、SHA、HMAC( Hash Message Authentication Code)。

          • PayLoad負載:存放有效信息,包括

          標準的聲明,類似開發(fā)語言總的關鍵字。包括

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

          公共的聲明:一般添加業(yè)務相關的必要信息,因為可解密,不建議敏感信息。
          私有的聲明:提供者和消費者共同定義的聲明,Base64對稱解密,不建議敏感信息
          Signature簽證
          簽證信息包括三部分:
          Base64加密的header
          Base64加密的payload
          secret-密鑰 使用header中聲明的加密算法對Header和payload的加密連接字符串進行加鹽secret組合加密。密鑰保存在服務端,服務端根據(jù)密鑰進行解密驗證。

          JWT與開發(fā)語言

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

          JWT官網(wǎng)

          https://jwt.io/
          這個網(wǎng)站提供了在線的基于不同算法的字符串和JSON對象的轉換工具,同時也收集了不同語言的多種實現(xiàn)庫。

          java-jwt

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

          <dependency>
          ?<groupId>com.auth0groupId>
          ?<artifactId>java-jwtartifactId>
          ?<version>3.8.3version>
          dependency>

          產生加密Token

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

          解密Token獲取負載信息并驗證Token是否有效

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

          推薦閱讀:

          杭州程序員從互聯(lián)網(wǎng)跳央企,曬一天工作和收入,網(wǎng)友:待一年就廢

          MySQL 中的 INSERT 是怎么加鎖的?

          互聯(lián)網(wǎng)初中高級大廠面試題(9個G)

          內容包含Java基礎、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務、Zookeeper、數(shù)據(jù)結構、限流熔斷降級......等技術棧!

          ?戳閱讀原文領?。?/span>? ? ? ? ? ? ? ??? ??? ? ? ? ? ? ? ? ? ?朕已閱?

          瀏覽 79
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  欧洲无码视频 | 操屄视频欧美日韩在线 | 亚洲成人三级视频 | 免费黄色A片 | 成人午夜在线 |