Java生成Token综述

一、JWT生成Token

JSON Web Token (JWT)是一种基于JSON的开放标准,用于在网络上传输声明的方案。JWT由三部分组成:Header(头部)、Payload(负载)和Signature(签名)。

1、JWT Header

JWT头部通常由两部分信息组成:声明类型和声明加密算法。常用的加密算法有HMAC SHA256和RSA。

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

2、JWT Payload

Payload包含声明,声明是关于实体(通常是用户)和其他数据的声明信息。JWT的标准定义中包含了一些默认的声明,也可以定义自己的声明。

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

3、JWT Signature

使用HS256算法,将Header和Payload进行Base64Url编码后再用“.”连接起来,再用Key进行SHA256加盐,就生成了签名。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

二、公众号Token生成

公众号Token是指公众号接口调用时的访问令牌,是一种JSON格式的数据结构。生成公众号Token需要按照以下步骤进行。

1、获取access_token

调用获取access_token接口,将appid和appsecret作为参数,获取到访问令牌access_token。

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

2、获取jsapi_ticket

调用获取jsapi_ticket接口,将access_token作为参数,获取到用于生成JS-SDK权限验证的jsapi_ticket。

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

3、生成signature

根据公众号的配置信息以及当前页面的url,生成signature。

signature = sha1(string1).hexdigest()
string1 = "jsapi_ticket=JSAPI_TICKET&noncestr=NONCESTR&timestamp=TIMESTAMP&url=URL"

三、Token生成方式

Token的生成方式有多种,以下列举几个常见的方式。

1、UUID

使用Java自带的UUID类生成Token。

String token = UUID.randomUUID().toString().replace("-", "");

2、SecureRandom

使用Java自带的SecureRandom类生成Token。

SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);
String token = bytes.toString();

3、JWT

使用JWT标准生成Token。

// 生成头部
Map header = new HashMap();
header.put("alg", "HS256");
header.put("typ", "JWT");

// 生成载荷
Map claims = new HashMap();
claims.put("sub", "1234567890");
claims.put("name", "John Doe");
claims.put("iat", 1516239022);

// 生成签名
byte[] secretBytes = DatatypeConverter.parseBase64Binary("your-256-bit-secret");
Key signingKey = new SecretKeySpec(secretBytes, SignatureAlgorithm.HS256.getJcaName());
String token = Jwts.builder()
  .setHeader(header)
  .setClaims(claims)
  .signWith(signingKey)
  .compact();

四、Token生成过程

Token的生成流程大致分为以下几步。

1、生成Payload

根据需要的信息,生成Payload。

2、生成Header

根据加密算法的要求和自己的需求,生成Header。

3、生成Signature

根据加密算法的要求,将Header和Payload连接起来,再进行加密,生成Signature。

4、将Header、Payload和Signature连接起来,生成Token

String token = base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + signature;

五、Token是谁生成的

Token可以由应用程序或者后端服务器生成,也可以由第三方授权平台生成,例如OAuth或者OpenID Connect。

1、应用程序/后端服务器生成Token

应用程序或者后端服务器可以自行生成Token,也可以使用JWT等标准生成库生成Token,例如Java的jjwt。

2、第三方授权平台生成Token

第三方授权平台如OAuth或者OpenID Connect可以生成Token,供应用程序使用。在OAuth流程中,access_token即为Token。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/241308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:29
下一篇 2024-12-12 12:29

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论