Python框架JWT实现token生成和校验例子

2024-04-10 18:21 Python框架JWT实现token生成和校验例子已关闭评论

在不同语言环境中,生成和校验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元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://www.teachcourse.cn/3246.html ,谢谢支持!

资源分享

分类:python 标签:, ,
Python库tkinter常用语法和示例说明 Python库tkinter常用语法和示例
Android之ProgressBar读取文件进度解析 Android之ProgressBar读取文件
Android开发之数据存储的四种方式之一:Network存储 Android开发之数据存储的四种方
ViewPager+FragmentPagerAdapter实现简单新闻客户端 ViewPager+FragmentPagerAd

评论已关闭!