📅  最后修改于: 2023-12-03 15:29:20.996000             🧑  作者: Mango
JWT全称为JSON Web Token,是一种用于身份验证的开放标准(RFC 7519)。JWT使用JSON格式来传输信息,可以通过签名来验证它的真实性。它由三个部分组成:头部、载荷和签名。
与传统的基于Cookie和Session的认证方式不同,JWT令牌不需要在服务端存储任何会话信息,使得服务端变简洁并且易于扩展。JWT可以提供单点登录、API访问控制、安全电子邮件声明等等功能。
在Android Studio中使用JWT,需要依赖以下库:
dependencies {
implementation 'com.auth0:java-jwt:3.18.1'
}
在生成JWT时,需要指定签名算法、密钥、载荷信息等参数,代码示例如下:
public String createJWT(String id, String issuer, String subject, long ttlMillis) {
// 签名方法
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
// 获取当前时间戳
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
// 创建payload头部信息
JwtBuilder builder = Jwts.builder()
.setId(id)
.setIssuer(issuer)
.setSubject(subject)
.setIssuedAt(now)
.signWith(signatureAlgorithm, "secretKey".getBytes());
// 添加过期时间
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
// 生成JWT
return builder.compact();
}
在验证JWT时,需要验证签名、过期时间等参数,代码示例如下:
public boolean verifyJWT(String jwt) {
try {
// 获取秘钥
byte[] apiKeySecretBytes = "secretKey".getBytes();
Key signingKey = new SecretKeySpec(apiKeySecretBytes, SignatureAlgorithm.HS256.getJcaName());
// 解析JWT并验证签名
Jws<Claims> claimsJws = Jwts.parserBuilder()
.setSigningKey(signingKey)
.build()
.parseClaimsJws(jwt);
// 获取载荷信息
Claims claims = claimsJws.getBody();
String id = claims.getId();
String issuer = claims.getIssuer();
// 验证过期时间
Date expiration = claims.getExpiration();
if (expiration.before(new Date())) {
return false;
}
return true;
} catch (Exception e) {
// 解析失败,JWT可能已经被篡改
return false;
}
}
本文介绍了Android Studio中的JWT令牌,包括JWT的定义和优势、Android Studio中使用JWT的方法以及代码示例。希望对使用JWT的程序员有所帮助。