• 面试官:jwt 是什么?javajwt 呢?懵逼了。。


    来源:https://blog.csdn.net/oscar999/article/details/102728303

    JWT介绍

    JWT概念

    JWT , 全写JSON Web Token, 是开放的行业标准RFC7591,用来实现端到端安全验证.

    简单来说, 就是通过一些算法对加密字符串和JSON对象之间进行加解密。

    JWT加密JSON,保存在客户端,不需要在服务端保存会话信息。,可以应用在前后端分离的用户验证上,后端对前端输入的用户信息进行加密产生一个令牌字符串, 前端再次请求时附加此字符串,后端再使用算法解密。

    JWT流程:

    JWT的构成

    JWT字符串:一段加密的JSON字符串。

    包含了三类信息

    • Header头部:Token类型和加密算法。加密算法常见的有MD5、SHA、HMAC( Hash Message Authentication Code)。
    • PayLoad负载:存放有效信息,包括

    标准的声明,类似开发语言总的关键字。包括

    iss(Issuser) - 签发者
    sub Subject 面向主体
    aud Audience 接收方
    exp Expiration time 过期时间戳
    nbf Not Before, 开始生效时间戳
    iat(Issued at) 签发时间
    jti(JWT ID): 唯一标识
    

    公共的声明:一般添加业务相关的必要信息,因为可解密,不建议敏感信息。

    私有的声明:提供者和消费者共同定义的声明,Base64对称解密,不建议敏感信息

    Signature签证

    签证信息包括三部分:

    Base64加密的header

    Base64加密的payload

    secret-密钥 使用header中声明的加密算法对Header和payload的加密连接字符串进行加盐secret组合加密。密钥保存在服务端,服务端根据密钥进行解密验证。

    JWT与开发语言

    JWT只是一个标准 可以通过不过的开发语言实现,包括Java,.NET, Python,Node Js, JavaScript,Perl, Ruby,Go等。同一种语言,不同的开发者提供了多种实现库,以Java语言为例有java-jwt、?jose4j、nimbus-jose-jwt、jjwt

    JWT官网

    https://jwt.io/

    这个网站提供了在线的基于不同算法的字符串和JSON对象的转换工具,同时也收集了不同语言的多种实现库。

    java-jwt

    java-jwt是Java语言中推荐的JWT实现库,使用Maven导入如下:

    <dependency>
     <groupId>com.auth0</groupId>
     <artifactId>java-jwt</artifactId>
     <version>3.8.3</version>
    </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);
    

    近期热文推荐:

    1.1,000+ 道 Java面试题及答案整理(2022最新版)

    2.劲爆!Java 协程要来了。。。

    3.Spring Boot 2.x 教程,太全了!

    4.20w 程序员红包封面,快快领取。。。

    5.《Java开发手册(嵩山版)》最新发布,速速下载!

    觉得不错,别忘了随手点赞+转发哦!

  • 相关阅读:
    I Hate It(线段树点修改区间查询)
    DFS(dfs)
    时间复杂度和空间复杂度的简单讲解
    [转]matlab读取cvs文件的几种方法
    适合小白的大白话讲解 --->Git 与 Github 的区别
    [转]串口、COM口、UART口, TTL、RS-232、RS-485区别详解
    Pandas学习之(一)
    正规表示法
    Numpy解决问题实例--随机漫步
    Python 中range和xrange的详细区别
  • 原文地址:https://www.cnblogs.com/javastack/p/15898860.html
Copyright © 2020-2023  润新知