您的位置:

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。