热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JWT实现

JWTjwt组成一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名(xxx.yyy.zzz)。Header:头部

JWT


jwt组成

一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名(xxx.yyy.zzz)。


  • Header:头部,通常头部有两部分信息:

    • ​ 声明类型type,这里是JWT(type=jwt)
    • 加密算法,自定义(rs256/base64/hs256)
      我们会对头部进行base64加密(可解密),得到第一部分数据
  • Payload:载荷,就是有效数据,一般包含下面信息:

    • 用户身份信息-userid,username(注意,这里因为采用base64加密,可解密,因此不要存放敏感信息)
    • 注册声明:如token的签发时间,过期时间,签发人等
      这部分也会采用base64加密,得到第二部分数据
  • Signature:base64加密,签名,是整个数据的认证信息。一般根据前两步的数据,再加上服务的的密钥(secret,盐)(不要泄漏,最好周期性更换),通过加密算法生成。用于验证整个数据完整和可靠性


引入依赖

com.auth0java-jwt3.10.3


生成token

static final String sign = "123dadasdasfa"; //
public static String tokenCreate(String username, String id){Calendar instance = Calendar.getInstance();instance.add(Calendar.DATE,7); // 设置7天过期时间//生成令牌String token = JWT.create().withClaim("username", username) // 设置自定义用户名 (PayLoad部分).withClaim("id", id) // 设置用户id (PayLoad部分).withExpiresAt(instance.getTime()) // 设置过期时间 (PayLoad部分).sign(Algorithm.HMAC256(sign)); // 设置签名 保密 复杂 (签名部分)System.out.println(token);return token;
}

数据验证


用户登录

public static String login(String username, String password){JwtUtil jwtUtil = new JwtUtil();String token = jwtUtil.tokenCreate(username, password);System.out.println(token);return token;
}

在这里插入图片描述


用户认证

@Test
void verify() {String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjIyIiwiZXhwIjoxNjMwOTMwODM4LCJ1c2VybmFtZSI6ImJlcCJ9.dj8jUxXnuzUrVLEIRLqU3k4NmpLjNjg6Kuo6GUTlWhY";JwtUtil jwtUtil = new JwtUtil();DecodedJWT verify = jwtUtil.verify(token);System.out.println(verify.getClaim("username").asString());System.out.println(verify.getClaim("id").asString());
}

在这里插入图片描述


推荐阅读
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 本文详细介绍了 Pentaho Kettle 中 RowMetaInterface.writeMeta 方法的使用,并提供了多个代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 本文介绍了如何利用摄像头捕捉图像,并将捕获的图像数据保存为文件。通过详细的代码示例,展示了摄像头调用的具体实现方法,适用于多种应用场景,如安全监控、图像处理等。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 1.创建目录mkdir-phomerocketmqnamesvr1data&&mkdir-phomerocketmqnamesvr1log&&mkdir-phomerocketm ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
author-avatar
雅芳07866
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有