日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java jwt 验证_教程:用Java创建和验证JWT

發布時間:2023/12/3 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java jwt 验证_教程:用Java创建和验证JWT 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java jwt 驗證

“我喜歡編寫身份驗證和授權代碼?!??從來沒有Java開發人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進行托管身份驗證,授權和多因素身份驗證。

Java對JWT(JSON Web令牌)的支持過去需要進行大量工作:廣泛的自定義,花費數小時來解決依賴項,以及僅用于組裝簡單JWT的代碼頁。 不再!

本教程將向您展示如何使用現有的JWT庫做兩件事:

  • 生成一個JWT
  • 解碼并驗證JWT
  • 您會注意到本教程很短。 那是因為那很容易。 如果您想更深入地了解,請查看JWT規范或深入閱讀有關在Spring Boot應用程序中使用JWT進行令牌身份驗證的更長的文章 。

    什么是JWT?

    JSON Web令牌是JSON對象,用于在各方之間以緊湊和安全的方式發送信息。 JSON規范 (或Javascript對象表示法)定義了一種使用鍵值對創建純文本對象的方法。 這是一種構造基于原始類型(數字,字符串等)的數據的緊湊方法。 您可能已經非常熟悉JSON。 就像沒有括號的XML。

    令牌可用于在各方之間發送任意狀態。 這里的“當事人”通常是指客戶端Web應用程序和服務器。 JWT具有多種用途:身份驗證機制,URL安全編碼,安全共享私有數據,互操作性,數據過期等。

    實際上,此信息通常與兩件事有關:授權和會話狀態。 服務器可以使用JWT告知客戶端應用程序允許用戶執行哪些操作(或允許他們訪問哪些數據)。

    JWT通常還用于存儲Web會話的狀態相關用戶數據。 因為JWT是在客戶端應用程序和服務器之間來回傳遞的,所以這意味著狀態數據不必存儲在某個地方的數據庫中(隨后在每個請求中都可以檢索)。 因此,它可以很好地擴展。

    讓我們看一個JWT示例(取自jsonwebtoken.io )

    JWT具有三部分:標頭,正文和簽名。 標頭包含有關JWT編碼方式的信息。 主體是代幣的肉 ( 索賠所在的地方)。 簽名提供了安全性。

    關于令牌的編碼方式以及信息在體內的存儲方式,我們不會在這里討論很多細節。 如果需要,請查看前面提到的教程 。

    不要忘記:加密簽名不??提供保密性; 它們只是檢測篡改JWT的一種方式,除非JWT經過專門加密,否則它們是公開可見的。 簽名只是提供了一種驗證內容的安全方法。

    大。 得到它了? 現在,您需要使用JJWT制作令牌! 對于本教程,我們使用現有的JWT庫。 Java JWT (又名JJWT)由Les Hazlewood (Apache Shiro的主要提交人,Apache Shiro是Stormpath的前聯合創始人兼CTO,現在是Okta自己的高級架構師)創建的,JJWT是一個簡化JWT創建和驗證的Java庫。 它完全基于JWT , JWS , JWE , JWK和JWA RFC規范,并根據Apache 2.0許可的條款開源。 該庫還為規范添加了一些不錯的功能,例如JWT壓縮和聲明執行。

    用Java生成令牌

    這部分超級容易。 讓我們看一些代碼。 克隆GitHub存儲庫 :

    git clone https://github.com/oktadeveloper/okta-java-jwt-example.git cd okta-java-jwt-example

    這個示例非常基礎,并且包含一個src/main/java/JWTDemo.java類文件,其中包含兩個靜態方法: createJWT()和decodeJWT() 。 足夠巧妙的是,這兩種方法創建了一個JWT并對JWT進行解碼。 看下面的第一種方法。

    public static String createJWT(String id, String issuer, String subject, long ttlMillis) {//The JWT signature algorithm we will be using to sign the tokenSignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);//We will sign our JWT with our ApiKey secretbyte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET_KEY);Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());//Let's set the JWT ClaimsJwtBuilder builder = Jwts.builder().setId(id).setIssuedAt(now).setSubject(subject).setIssuer(issuer).signWith(signatureAlgorithm, signingKey);//if it has been specified, let's add the expirationif (ttlMillis > 0) {long expMillis = nowMillis + ttlMillis;Date exp = new Date(expMillis);builder.setExpiration(exp);} //Builds the JWT and serializes it to a compact, URL-safe stringreturn builder.compact(); }

    總而言之, createJWT()方法執行以下操作:

    • 設置哈希算法
    • 獲取簽發日期索賠的當前日期
    • 使用SECRET_KEY靜態屬性生成簽名密鑰
    • 使用流利的API添加聲明并簽署JWT
    • 設置到期日期

    可以根據您的需求進行定制。 例如,如果您想添加其他或自定義聲明。

    解碼令牌

    現在看一下更簡單的decodeJWT()方法。

    public static Claims decodeJWT(String jwt) {//This line will throw an exception if it is not a signed JWS (as expected)Claims claims = Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(SECRET_KEY)).parseClaimsJws(jwt).getBody();return claims; }

    該方法再次使用靜態SECRET_KEY屬性生成簽名密鑰,并使用該方法來驗證JWT是否未被篡改。 如果簽名與令牌不匹配,則該方法將引發io.jsonwebtoken.SignatureException異常。 如果簽名確實匹配,則該方法將索賠作為Claims對象返回。

    差不多了!

    運行JUnit測試

    為了獲得更多榮譽,您可以在示例項目中運行JUnit測試。 有三個測試,它們演示了JJWT庫的一些基本功能。 第一個測試顯示了一條愉快的路,創建并成功解碼了有效的JWT。 第二個測試顯示了當您嘗試將完全偽造的字符串解碼為JWT時,JJWT庫將如何失敗。 最后一個測試顯示了被JJWT篡改的方式將如何使decodeJWT()方法引發SignatureException 。

    您可以使用以下命令從命令行運行這些測試:

    ./gradlew test -i

    -i用于將Gradle的日志級別設置為Info以便我們看到測試的簡單日志輸出。

    了解有關在Java應用中使用JWT的更多信息

    JJWT庫使創建和驗證JWT非常容易。 只需指定一個秘密密鑰和一些聲明,您就會擁有一個JJWT。 以后,使用相同的密鑰對JJWT進行解碼并驗證其內容。

    現在,創建和使用JJWT非常簡單,為什么不使用它們呢?

    不要忘記SSL! 請記住,除非對JWT進行加密,否則在其中編碼的信息通常僅是Base64編碼的,任何小孩和一些寵物都可以讀取。 因此,除非您希望中國,俄羅斯和FBI讀取所有會話數據,否則請使用SSL對其進行加密。

    Baeldung 在Java和JWT上有相當不錯的深入教程 。

    另外,這里還有Okta博客提供的更多鏈接,可幫助您繼續前進:

    • Java應用程序的簡單令牌認證
    • Spring Boot,OAuth 2.0和Okta入門
    • 保護Spring Boot應用程序安全的10種絕佳方法
    • 如果您的JWT失竊了怎么辦?
    • JWT分析器和檢查器Chrom插件
    • 在線編碼或解碼JWT

    如果您對此帖子有任何疑問,請在下面添加評論。 有關更多精彩內容, 請在Twitter上關注@oktadev , 在Facebook上關注我們,或訂閱我們的YouTube頻道 。

    “我喜歡編寫身份驗證和授權代碼?!??從來沒有Java開發人員。 厭倦了一次又一次地建立相同的登錄屏幕? 嘗試使用Okta API進行托管身份驗證,授權和多因素身份驗證。

    ``教程:用Java創建和驗證JWT''最初于2018年10月31日發布在Okta開發人員博客上。

    翻譯自: https://www.javacodegeeks.com/2019/01/tutorial-create-verify-jwts-java.html

    java jwt 驗證

    總結

    以上是生活随笔為你收集整理的java jwt 验证_教程:用Java创建和验证JWT的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。