zoukankan      html  css  js  c++  java
  • JWT学习

    什么是JWT?

    jwt的全称是JSON Web Token;JSON Web
    Token是一个开源标准(rfc7519),是一个轻量,携带着用户信息的json
    Object对象,安全的进行服务器端与客户端交互;这个对象可以校验、信任,因为它由数字组成;
    轻量:因为轻量,所以可以更好地放在httpheader里面,在服务器与客户端之间快速交互
    携带用户信息:将用户的重要信息:userId,userName等放在jwt当中,不用再次从数据库当中获取

    什么时候使用?

    1. 需要认证:用户根据username、password登录后,使用jwt返回一个token给客户端,客户端在请求的时候将token放在http
      header当中给服务器端,服务器端校验token的合法性,然后处理请求的response

    2. 用户信息被改变:

    jwt的结构

    基本结构

    由header、payload、sinature三部分组成,最终以xxx.yyy.zzz的形式拼接

    header由两部分组成:

    • type of token : JWT
    • 加密算法: HMAC/SHA256/RSA

    payload

    payload里面存放着用户的信息,可以使用claims进行复合拼装,claims由已定义、public、private三部分组成

    • resolved(已定义):iss/exp/sub/aud
    • public:url信息
    • private:用户信息

    payload当中的数据都可以由用户自行设置

    sinature

    签名,根据header、payload和一个用户设置的密码(secret),生成一个签名,最后将header,payload,sinature拼接成xxx.yyy.zzz形式

    怎么使用(java)

    pom.xml里面引入jwt

    <dependency>
     <groupId>io.jsonwebtoken</groupId>
     <artifactId>jjwt</artifactId>
     <version>0.7.0</version>
    </dependency> 
     public static void main(String[] args) {
         String secret = "password";
         String userId = "zhangsan";
         String userName = "张三";
    
         // 输出的jwt:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ6aGFuZ3NhbiIsInVzZXJOYW1lIjoi5byg5LiJIn0.024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9g
         String jwt = Jwts.builder().setSubject(userId).signWith(SignatureAlgorithm.HS256, secret)
             .claim("userName", userName).compact();
         System.out.println(jwt);
         // 客户端将Jwt传递给服务器,服务器根据secret进行解密,可以对jwt进行校验,取数据
         Jws<Claims> claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(jwt);
         //header={alg=HS256},body={sub=zhangsan, userName=张三},signature=024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9g
         System.out.println(claims);
    
     }

    由上面可以看出claims里面存放的数据由header、body、signature三部分组成

  • 相关阅读:
    20.Valid Parentheses
    67.Add Binary
    String、StringBuilder、StringBuffer
    15句乔布斯经典语录(中英文)
    几个高逼格 Linux 命令!
    几个高逼格 Linux 命令!
    24 个必须掌握的数据库面试问题!
    24 个必须掌握的数据库面试问题!
    chrome开发者工具各种骚技巧
    chrome开发者工具各种骚技巧
  • 原文地址:https://www.cnblogs.com/penggy/p/7475811.html
Copyright © 2011-2022 走看看