JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为JSON对象。在Web应用中,JWT通常用于身份验证和信息交换,它使得在服务提供者和服务消费者之间传递安全可信的声明成为可能。
JWT由三部分组成,它们之间用点(.
)分隔开:
以下是使用Java创建和验证JWT的一个简单示例。这个例子使用了jjwt
库,这是一个流行的Java库,用于创建和验证JSON Web Tokens。
首先,您需要将jjwt
库添加到您的项目中,如果您使用的是Maven,可以添加以下依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
创建JWT的代码如下:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtExample {
public static String createJWT(String id, String issuer, String subject, long ttlMillis) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
// 签名算法以及密钥
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("your-secret-key");
// 设置JWT Claims
JwtBuilder builder = Jwts.builder().setId(id)
.setIssuedAt(now)
.setSubject(subject)
.setIssuer(issuer)
.signWith(signatureAlgorithm, apiKeySecretBytes);
// 设置过期时间
if (ttlMillis > 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
// 构建JWT并将其序列化为一个紧凑的、URL安全的字符串
return builder.compact();
}
public static void main(String[] args) {
String jwt = createJWT("id", "issuer", "subject", 3600000); // 设置1小时后过期
System.out.println("JWT: " + jwt);
}
}
验证JWT的代码如下:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
public class JwtParserExample {
public static void parseJWT(String jwt) {
// 这里的密钥要与生成JWT使用的密钥一致
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("your-secret-key");
// 解析JWT字符串
Claims claims = Jwts.parser()
.setSigningKey(apiKeySecretBytes)
.parseClaimsJws(jwt).getBody();
System.out.println("ID: " + claims.getId());
System.out.println("Subject: " + claims.getSubject());
System.out.println("Issuer: " + claims.getIssuer());
System.out.println("Expiration: " + claims.getExpiration());
}
public static void main(String[] args) {
String jwt = "your.jwt.token.here";
parseJWT(jwt);
}
}
请注意,您需要将your-secret-key
替换为实际的密钥,并确保在创建和解析JWT时使用相同的密钥。同样,your.jwt.token.here
应该是您实际接收到的JWT字符串。