• JWT JSON Web Token 令牌 技术 在 微服务 中 鉴权功能的使用


    JWT是一种规范,本身也是一个字符串,作用就是加密,不便于理解,

    程序可以解读其信息,往往作为令牌使用,;

    JWT 是 JSON Web Token 的缩写, 翻译是 JSON 网络 令牌 的意思;

    JWT 字符串 由  3个 部分组成

    头部:

    是一个json字符串 描叙一下 基本信息:例如说明 类型 算法 等

    比如说这个 json 字符串 

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

    在头部指明了签名算法是HS256算法。 我们进行BASE64编码http://base64.xpcha.com/,编码后的字符串如下:
    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

    就是 

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

    载荷:

    载荷就是 JWT 放 信息的地方,好像是 货车 的 车厢
    格式同 头部
    例如
    {"sub":"1234567890","name":"John Doe","admin":true}
    =>
    eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

    签证:

    文章煞尾 的作用 + 字符串 加盐加密 的作用

    最后这里 是一个 存储的字符串,类似这样

    TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

    签证这里 最重要的是 一个 字符串,  再解析整个JWT字符串的时候需要用到,你不知道 签证字符串 是什么 ,就无法 解析整个 JWT 字符串

    整个

    JWT字符串 类似是这个样子 包含了如上3部分信息  

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

    /******************************************************************************************************************************************/

    JWT作为

    令牌使用的时候 往往 通过是 后台 添加头 信息 发给客户端,也可以做成cookie 发给客户端;

    /*****************************************************************************************************************************************/

     

    Apache开源的JJWT

    操作 JWT

    1.0生成 JWT

    2.0解析JWT

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    首先需要如下依赖

    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.0</version>
    </dependency>

    然后
    可用这个类生成 JWT
    JwtBuilder builder= Jwts.builder()
        .setId("888")   //设置唯一编号
        .setSubject("某JSON")//设置主题  可以是JSON数据
        .setIssuedAt(new Date())//设置签发日期
        .signWith(SignatureAlgorithm.HS256,"biyou");//设置签名 使用HS256算法,并设置SecretKey(字符串),这个"biyou"是关键,后面解析要用这个
    //构建 并返回一个JWT字符串 
    System.out.println( builder.compact() );

    >>>>>>>>>>>>>>>>>
    然后你要拿 这个 JWT 字符串做什么都行

    解析JWT字符串,可以理解是(货车卸货)
    String compactJwt="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4ODgiLCJzdWIiOiLlsI_nmb0iLCJpYXQiOjE1NTc5MDQxODF9.ThecMfgYjtoys3JX7dpx3hu6pUm0piZ0tXXreFU_u3Y";
    Claims claims = Jwts.parser().setSigningKey("biyou").parseClaimsJws(compactJwt).getBody();
    //卸货
    System.out.println(claims);

    /*************************************************************************************/
    以上是JJWT 的基本操作, JJWT 也可以给 生成的 JWT 字符串 设置 过期时间,
    如果是已过期的 JWT 字符串,JJWT 在解析的时候,会抱一个
    ExpiredJwtException的异常,用try-catch !!专门!!抓一下这个异常
    就知道 这个 这个 JWT 过期了,

    JJWT设置过期时间如下
    long currentTimeMillis = System.currentTimeMillis();
    
    
    Date date = new Date(currentTimeMillis+10086L);
    
    
    JwtBuilder builder= Jwts.builder()
    
    
        .setId("888")   //设置唯一编号
    
    
        .setSubject("某JSON")//设置主题  可以是JSON数据
    
    
        .setIssuedAt(new Date())//设置签发日期
    
    
        .setExpiration(date)//设置过期时间
    
    
        .signWith(SignatureAlgorithm.HS256,"biyou");//设置签名 使用HS256算法,并设置SecretKey(字符串)
    
    
    //构建 并返回一个字符串
    
    
    System.out.println( builder.compact() );

    JJWT解析
    String compactJwt="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4ODgiLCJzdWIiOiLlsI_nmb0iLCJpYXQiOjE1NTc5MDUzMDgsImV4cCI6MTU1NzkwNTMwOH0.4q5AaTyBRf8SB9B3Tl-I53PrILGyicJC3fgR3gWbvUI";
    Claims claims = Jwts.parser().setSigningKey("biyou").parseClaimsJws(compactJwt).getBody();
    System.out.println(claims);
    >>>>>>>>>>>>>>>>>>>>
    如果设置了过期时间 解析 需要 try-catch 一下 专门 抓 过期异常
    ExpiredJwtException ;




     
  • 相关阅读:
    返回一个一维整数数组中最大子数组的和02
    软工作业04四则运算网页版
    所有子数组的和的最大值
    学习进度表(第五,六周)
    学习进度表(第四周)
    四则运算2的单元测试
    《构建之法》阅读笔记02
    软工作业03
    单元测试练习
    学习进度表(第三周)
  • 原文地址:https://www.cnblogs.com/cjd01/p/14066301.html
Copyright © 2020-2023  润新知