最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jwt生成token和token解析基礎(chǔ)詳解

 更新時間:2023年11月03日 09:59:01   作者:豐木  
這篇文章主要為大家介紹了jwt生成token和token解析基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1.jwt結(jié)構(gòu)

jwt生成到客戶端(瀏覽器)的token包含"."分開的三個部分:

  • header(Base64Url編碼過的)
  • payload(Base64Url編碼過的)
  • signature

形如:xxxxx.yyyyy.zzzzz

1.1 例子:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiYW5keSIsImV4cCI6MTY1NTg5NzEwMCwiYWdlIjozMH0.32hfc-oBxGg2Lgk3QR48HCbadsbOfCUxexw9aiQ_FQk

拆為3部分:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.(header)

eyJuYW1lIjoiYW5keSIsImV4cCI6MTY1NTg5NzEwMCwiYWdlIjozMH0.(payload)

32hfc-oBxGg2Lgk3QR48HCbadsbOfCUxexw9aiQ_FQk(signature)

2.header+payload+signature介紹

2.1 header

上面的header部分:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9base64Url解碼后:

{
  "typ": "JWT",
  "alg": "HS256"
}

通常說明token的類型、生成token所使用的的算法

The header typically consists of two parts: the type of the token, which is JWT, and the signing algorithm being used, such as HMAC SHA256 or RSA.

2.2 Payload

上面的Payload部分:eyJuYW1lIjoiYW5keSIsImV4cCI6MTY1NTg5NzEwMCwiYWdlIjozMH0base64Url解碼后:

{
  "name": "andy",
  "exp": 1655897100,
  "age": 30
}

通常是要客戶端請求時帶貨的內(nèi)容(比如用戶名,比如是否是管理員等,server端生成的時候可以定義內(nèi)容,形式如map)

The second part of the token is the payload, which contains the claims. Claims are statements about an entity (typically, the user) and additional data. There are three types of claims: registered, public, and private claims.

2.3 Signature

上面的Signature部分:32hfc-oBxGg2Lgk3QR48HCbadsbOfCUxexw9aiQ_FQk它是用來驗簽的, 驗證是否被客戶端修改過,它的生成邏輯如下:
就是使用header部分的base64Url、payload部分的base64Url部分、小圓點(diǎn)、以及你的私鑰密碼,使用指定的算法生成的;因為有密碼, 所以是安全的,這也是密碼要保護(hù)好的原因。

計算邏輯如下:

HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
12345
)

3. java測試用例

/**
     * JWT加密生成token, payload中保存 name/age
     */
    @Test
    public void testJwtToken() {
        // 加密秘鑰
        final String SECRET = "12345";

        Calendar c = Calendar.getInstance();
        c.add(Calendar.HOUR, 2);

        String token = JWT.create().withClaim("name", "andy")
                .withClaim("age", 30)
                .withExpiresAt(c.getTime())
                .sign(Algorithm.HMAC256(SECRET));

        System.out.println(token);
    }

    /**
     * JWT解密生成token, 讀取payload中保存的 name/age
     */
    @Test
    public void testJwtVerify() {

        String jwtToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiYW5keSIsImV4cCI6MTY1NTg4ODk3MiwiYWdlIjozMH0.LU4AQJkld03kDhatkiiArSJI4liGiANArTvoyswzk5I";
        final String SECRET = "12345";

        JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
        DecodedJWT decodedJWT = verifier.verify(jwtToken);
        Claim name = decodedJWT.getClaim("name");
        Claim age = decodedJWT.getClaim("age");
        System.out.println(name);
        System.out.println(age);

    }

以上就是jwt生成token和token解析基礎(chǔ)的詳細(xì)內(nèi)容,更多關(guān)于jwt生成token的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Cloud Stream整合RocketMQ的搭建方法

    Spring Cloud Stream整合RocketMQ的搭建方法

    本文介紹了如何使用SpringCloudStream整合RocketMQ進(jìn)行消息傳遞,SpringCloudStream是一個用于構(gòu)建與共享消息系統(tǒng)連接的框架,支持持久pub/sub語義和消費(fèi)者組,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Java實現(xiàn)按年月打印日歷功能【基于Calendar】

    Java實現(xiàn)按年月打印日歷功能【基于Calendar】

    這篇文章主要介紹了Java實現(xiàn)按年月打印日歷功能,涉及java基于Calendar進(jìn)行日期運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • Java 判斷兩個字符串是否由相同的字符組成的實例

    Java 判斷兩個字符串是否由相同的字符組成的實例

    今天小編就為大家分享一篇Java 判斷兩個字符串是否由相同的字符組成的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 通過工廠模式返回Spring Bean方法解析

    通過工廠模式返回Spring Bean方法解析

    這篇文章主要介紹了通過工廠模式返回Spring Bean方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Java如何獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時間和時間戳

    Java如何獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時間和時間戳

    這篇文章主要介紹了如何在Java中獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時間和時間戳,并提供了示例代碼,新手小白完全可以通過文中介紹的代碼實現(xiàn),需要的朋友可以參考下
    2025-03-03
  • Java中BitMap(位圖)hutool版、IntMap、LongMap示例詳解

    Java中BitMap(位圖)hutool版、IntMap、LongMap示例詳解

    這篇文章主要給大家介紹了關(guān)于Java中BitMap(位圖)hutool版、IntMap、LongMap的相關(guān)資料,通過位運(yùn)算高效存儲和檢索整數(shù),相比于傳統(tǒng)數(shù)組,它們在內(nèi)存占用和性能上都有顯著優(yōu)勢,需要的朋友可以參考下
    2024-12-12
  • 深入理解注解與自定義注解的一些概念

    深入理解注解與自定義注解的一些概念

    今天給大家?guī)淼奈恼率亲⒔獾南嚓P(guān)知識,本文圍繞著注解與自定義注解的一些概念展開,文中詳細(xì)介紹了這些知識,需要的朋友可以參考下
    2021-06-06
  • IDEA版使用Java操作Redis數(shù)據(jù)庫的方法

    IDEA版使用Java操作Redis數(shù)據(jù)庫的方法

    這篇文章主要介紹了IDEA版使用Java操作Redis數(shù)據(jù)庫的方法,首先需要下載jedis.jar包,然后再工程中設(shè)置具體操作步驟跟隨小編一起學(xué)習(xí)下吧
    2021-08-08
  • 基于JavaMail API收發(fā)郵件的方法

    基于JavaMail API收發(fā)郵件的方法

    這篇文章主要介紹了基于JavaMail API收發(fā)郵件的方法,實例分析了javamail的使用方法與相關(guān)注意事項,非常具有實用價值,需要的朋友可以參考下
    2015-07-07
  • Java不要再使用!=null判空了!

    Java不要再使用!=null判空了!

    這篇文章主要給大家介紹了關(guān)于Java不要再使用!=null判空的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論

石狮市| 商丘市| 横山县| 成都市| 马龙县| 郎溪县| 无为县| 望谟县| 四会市| 浦城县| 广安市| 漳浦县| 兴国县| 霍州市| 开鲁县| 什邡市| 马关县| 京山县| 隆化县| 长寿区| 锡林浩特市| 竹北市| 雷州市| 阜宁县| 邹平县| 周口市| 汤阴县| 应用必备| 洪雅县| 高州市| 白水县| 裕民县| 哈巴河县| 于都县| 呼玛县| 土默特左旗| 沈阳市| 新龙县| 安陆市| 沛县| 平昌县|