在不同语言环境中,生成和校验JSON Web Tokens (JWTs) 的具体实现会有所不同,但基本流程相似。以下分别给出Java和Python环境下使用JWT库进行生成和校验的简单示例:
Java 使用 jjwt 库
// 导入相关依赖
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
// 生成JWT
String secretKey = "your-secret-key"; // 这应当是从安全地方获取的秘密
long ttlMillis = 60 * 60 * 1000; // Token的有效期,例如1小时
// 设置Claims信息
Map<String, Object> claims = new HashMap<>();
claims.put("sub", "1234567890");
claims.put("name", "John Doe");
claims.put("iat", System.currentTimeMillis()); // issued at claim
claims.put("exp", System.currentTimeMillis() + ttlMillis); // expires claim
// 生成Token
String token = Jwts.builder()
.setClaims(claims)
.signWith(SignatureAlgorithm.HS256, secretKey.getBytes(StandardCharsets.UTF_8))
.compact();
// 校验JWT
public boolean isValidToken(String token) {
try {
Jwts.parserBuilder()
.setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
.build()
.parseClaimsJws(token);
return true; // 如果没有抛出异常则认为Token有效
} catch (ExpiredJwtException | UnsupportedJwtException | MalformedJwtException |
SignatureException | IllegalArgumentException e) {
return false; // 出现这些异常则认为Token无效
}
}
Python 使用 PyJWT 库
# 导入相关依赖
import jwt
import time
import datetime
# 生成JWT
secret_key = "your-secret-key"
payload = {
'sub': '1234567890',
'name': 'John Doe',
'iat': int(time.time()), # issued at
'exp': int(time.time()) + 3600 # expires in 1 hour
}
# 生成Token
token = jwt.encode(payload, secret_key, algorithm='HS256')
# 校验JWT
def verify_jwt_token(token):
try:
decoded_payload = jwt.decode(
token,
secret_key,
algorithms=['HS256'],
options={'verify_exp': True} # 验证过期时间
)
return decoded_payload # 如果成功解码并验证,返回载荷信息
except jwt.ExpiredSignatureError:
return False # Token过期
except jwt.PyJWTError:
return False # 其他错误,Token无效
# 使用校验函数
is_valid, payload_data = True, verify_jwt_token(token)
if is_valid:
print("Token is valid and the payload:", payload_data)
else:
print("Token is not valid.")
以上示例展示了如何生成和校验JWT,但请注意,在实际应用中,应确保密钥的安全存储,同时考虑其他可能的配置选项,如受众(audience)、发行人(issuer)等字段的验证。
当前文章价值8.94元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)
评论已关闭!