首页 > 其他分享 >JWT用户认证体系

JWT用户认证体系

时间:2023-02-26 13:55:06浏览次数:27  
标签:Algorithm JWT jwt 用户 解密 token verifier 认证

依赖

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>4.0.0</version>
        </dependency>

JWTUtil 工具包

public class JWTUtils {
    //Edition是对象
    public static String createJWT(Edition edition){
        //声明签名的算法。 1.参数为密钥,注意密钥只能后端知晓,因为密钥泄露代表可以任意对生成的jwt串进行解密
        Algorithm algorithm = Algorithm.HMAC256("secret");
        //2.声明头部
        Map map = new HashMap<>();
        //声明加密算法
        map.put("alg","HS256");
        //声明类型 jwt 固定值
        map.put("typ","JWT");

        //3.声明载荷 并且创建出jwt串
        String token = JWT.create()
                //设置头部
                .withHeader(map)
                //载荷中的公共信息。签发人。任意填写即可
                .withIssuer("test")
                //载荷中的公共信息 受众,通常指用户
                .withAudience("edition")
                //载荷中的自定义信息。key:value的存储格式,任意存储内容。
                .withClaim("editionSecretKey", edition.getEditionSecretKey())
                .withClaim("catalogueVersions", edition.getCatalogueVersions())
//                .withClaim("id", user.get("id").toString())
                //使用定义好的签名算法
                .sign(algorithm);
        return token;
    }

//判断秘钥是否存在
    public static Boolean verifyToken(String token){
        try {
            Algorithm algorithm = Algorithm.HMAC256("secret"); //use more secure key
            //创建jwt的解密对象
            JWTVerifier verifier = JWT.require(algorithm)
                    //注意 解密的签发人要与加密的签发人保持一致
                    .withIssuer("test")
                    .build(); //Reusable verifier instance
            //对token进行解密
            DecodedJWT jwt = verifier.verify(token);
            return true;
        }catch (Exception e){
            return false;
        }
    }

    //把token秘钥里的catalogueVersions解密
    public static Integer getCatalogueVersions(String token) {
        //声明签名算法,注意:加密的密钥与解密的密钥保持一致,如果没有一致则无法解密
        Algorithm algorithm = Algorithm.HMAC256("secret"); //use more secure key
        //创建jwt的解密对象
        JWTVerifier verifier = JWT.require(algorithm)
                //注意 解密的签发人要与加密的签发人保持一致
                .withIssuer("test")
                .build(); //Reusable verifier instance
        //对token进行解密
        DecodedJWT jwt = verifier.verify(token);
        //我们就可以从jwt中获取到自定义的用户名称
        System.out.println("图书秘钥:"+jwt.getClaim("editionSecretKey").asString());
        System.out.println("catalogueVersions:"+jwt.getClaim("catalogueVersions").asInt());
        return jwt.getClaim("catalogueVersions").asInt();
    }
}

  

标签:Algorithm,JWT,jwt,用户,解密,token,verifier,认证
From: https://www.cnblogs.com/xbinbin/p/17156573.html

相关文章

  • 时间击败100%用户的快慢指针删除链表中的倒数第n个节点算法
    //给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 ///***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNoden......
  • Linux命令-用户、权限管理
     Linux命令-用户、权限管理用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理。在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都......
  • css用户体验
    选择适合的鼠标光标禁用光标cursor:not-allowed;隐藏光标cursor:url('transparent.gif');cursor:none;扩大可点击区域伪元素:button{position:relative;......
  • linux用户密码安全策略
    LinuxPAM模块类型linuxPAM配置文件/etc/pam.d/system-auth认证管理auth账号管理account密码管理 password会话管理session#%PAM-1.0#Thisfileisauto......
  • asp.net 启用认证的全过程
    1、webconfig<system.web><authenticationmode="Forms"><formsloginUrl="~/Admin/Login"timeout="2880"></forms></authentication></system.web>增加下面的节......
  • 用户权限和管理
    一、权限的基本概念1、权限的基本概念Linux系统中文件和目录的权限有以下几种  2、Linux文件和目录权限查看Linux中可以通过ls-l......
  • 基于区块链的移动边缘计算 群签名和认证方案
    一、介绍BMEC:Blockchain-BasedMobile-EdgeComputing作用BMEC解决了移动区块链环境中设备计算资源有限的问题,同时保证了计算资源的分布式部署和交易数据的可追溯性......
  • Centos7 Kafka+zookeeper SASL认证实践
    一、概述上回已经完成kafka+zookeeper的基础功能的实现,但是因为默认不认证存在很大的安全风险,这次完成SASL_PLAINTEXT的认证类型实践。二、安全配置2.1zookeeperSASL配......
  • 使用sys用户imp导入数据遇到字符集转换后列长度不够报错
    使用sys用户imp数据遇到字符集转换时列长度不够的报错,ORA-12899:valuetoolargeforcolumn"SYS"."M_ASH"."ACTION"(actual:40,maximum:32)。从报错可以看到具体的表......
  • 参数化1、用户定义变量;2、用户参数
    1、添加配置元件->用户定义变量    2、测试计划中定义  3、添加前置处理器->用户参数  区别:1、用户定义变量启动时获取1次值,运行中值不变2、用户参数......