【jwt Token】 Java生成token python 解析


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

项目场景需要python 接口解析java端生成的jwt token


#### 环境
java

​ com.auth0.jwt.JWT; (ruoyi框架)

python

​ pyjwt

一、jwt是什么?

JSON Web Token (JWT) 是一个开放标准 ( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。该信息可以被验证和信任,因为它是经过数字签名的。JWT 可以使用秘密(使用HMAC算法)或使用RSAECDSA的公钥/私钥对进行签名

二、使用步骤

1.java

    /**
     * 获得token中的信息无需secret解密也能获得
     * @return token中包含的用户名
     */
    public static String getUsername(String token)
    {
        try
        {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim("username").asString();
        }
        catch (JWTDecodeException e)
        {
            return null;
        }
    }

    /**
     * 生成签名,5min后过期
     * @param username 用户名
     * @param secret 用户的密码
     * @return 加密的token
     */
    public static String sign(String username, String secret)
    {
        Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
        Algorithm algorithm = Algorithm.HMAC256(secret);
        // 附带username信息
        return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm);
    }

2.python

# coding: utf-8
"""
pip3 install pyjwt
文档:https://pyjwt.readthedocs.io/en/stable/
"""
import base64
import jwt
"""
获取用户名
"""
def get_username(token):
    s = token.split(".")[1]
    s += "=" * ((4 - len(s) % 4) % 4)
    print(eval(str(base64.urlsafe_b64decode(s), encoding="utf8")))
    return eval(str(base64.urlsafe_b64decode(s), encoding="utf8"))["username"]

"""
验证
"""
def verify(token,password:str):
    jwt.decode(token, password, algorithms=["HS256"],options={"verify_exp": False})
    payload = jwt.decode(token, password, algorithms=['HS256'])
    if payload:
        return True, payload
    return False, token


if __name__ == '__main__':
    token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2Mjg3NTcyNDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.H-LpNo8UDcQeMW3O7Uo7FjCLc9idqzGPstK0zTLbZOc"
    print(get_username(token))
    print(verify(token,"用户名","密码"))
Logo

快速构建 Web 应用程序

更多推荐