【jwt Token】 Java生成token python 解析
【jwt Token】 Java生成token python 解析提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录【jwt Token】 Java生成token python 解析前言java一、jwt是什么?二、使用步骤1.java2.python前言项目场景需要python 接口解析java端生成的jwt token#### 环境javacom.auth0.jwt.J
·
【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算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
二、使用步骤
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,"用户名","密码"))
更多推荐
已为社区贡献1条内容
所有评论(0)