使用JWT简化http接口鉴权,告别烦人的加密、解密代码吧

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:



在项目开发过程经常对接其他系统和被其他系统对接,发现很多系统都有一套自己的鉴权规则,还不提供库或代码,只有文字描述,经常需要自己实现鉴权方法,这真是太低效了。本文介绍一个在项目中使用一个成熟稳定的开源框架JWT( JSON Web Token )。

哎呀,不好意思,还是在写鉴权哎。 希望不要烦到你哦

详细地址在:https://jwt.io/ 。

JWT的特点有: 
简单:有各种语言的sdk和样例,不需要自己写加解密算法了
安全:加密和签名方法可靠,比自己想出来的加密方法靠谱多啦 
规范: RFC 7519标准定义的

下面文档是项目过程中写的,欢迎参考:

JWT(Json Web Token) 是实现token技术的一种解决方案,JWT由三部分组成: header(头)、payload(载体)、signature(签名)。

jwt header

JWT第一部分是header,header主要包含两个部分,algtoken的类型,typ为加密的算法。
{
    "alg": "HS256",
    "typ": "JWT"
}
 

jwt payload

JWT第二部分是payload,payload是Token的详细内容,包含一些标准字段,也可以包含自定义字段。
{
    "exp": 1493090001,
    "iss": "appid"
}
 
如下是一些标准字段,我们只用exp/iss
iss:Issuer,发行者
sub:Subject,主题
aud:Audience,观众
exp:Expiration time,过期时间
nbf:Not before
iat:Issued at,发行时间
jti:JWT ID

签名 token

JWT第二部分是Signature,这部分的内容是这样计算得来的:
  1. Base64(header).Base64(payload)得到一个Base64编码的字符串(下文成EncodeString)
  2. HS256(EncodeString,"秘钥");计算得到的即使签名
计算得到上面三部分内容后,用.连接起来就是一个完整的JWT TOKEN,秘钥是保存在服务器上的一个私有密
钥。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoi5byg5LiJIiwiaWF0IjoxNDkzMDkxNjk0fQ.IrhnrcvDh1ygngW7HDWLhh2Bc2zG674Lum2BROE_7sI

 
可以使用 https://jwt.io 的在线工具,进行token的编码和解码的测试和验证。
 
下面是工具截图:
 
1522724515763-608e5804-ff87-4e00-834b-cd
 
 

JWT各种编程语言的库

 
官网已经提供大部分编程语言,请参考所使用编程语言对应的库的示例代码使用  https://jwt.io/#libraries-io
 

Java示例代码

Maven安装

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.3.0</version>
</dependency>
 

生成token

try {
    Algorithm algorithm = Algorithm.HMAC256("secret");
    String token = JWT.create()
        .withIssuer("appId")
        .withClaim("exp", new Date(new Date().getTime() + 60*1000));
)
        .sign(algorithm);
} catch (UnsupportedEncodingException exception){
    //UTF-8 encoding not supported
} catch (JWTCreationException exception){
    //Invalid Signing configuration / Couldn't convert Claims.
}
 

Python示例代码

 

安装PyJwt

Install withpip:
$ pip install PyJWT
 

生成token

>>> import jwt
>>> token = jwt.encode({'iss': 'appId', 'exp' : date() }, 'secret', algorithm='HS256')
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg'


 
 

GO示例代码

Example creating, signing, and encoding a JWT token using the HMAC signing method
Code:
// Create a new token object, specifying signing method and the claims // you would like it to contain.
 token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "iss": "appId", "exp": time.Date(2015, 10, 10, 12, 0, 0, 0, time.UTC).Unix(), })
// Sign and get the complete encoded token as a string using the secret
secret := []byte("password")
tokenString, err := token.SignedString(secret)
fmt.Println(tokenString, err)

Output:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.u1riaD1rW97opCoAuRCTy4w58Br-Zk-bh7vLiRIsrpU 
 
 

使用方法

将生成的token放到HTTP请求的token参数中即可。示例如下:
目录
相关文章
|
13天前
|
安全 网络安全 数据安全/隐私保护
HTTPS中的加密算法
HTTPS中的加密算法
|
3月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
71 10
|
2月前
|
JSON 数据安全/隐私保护 数据格式
Nest.js 实战 (八):基于 JWT 的路由身份认证鉴权
这篇文章介绍了身份验证的重要性和多种处理策略,重点放在了JWT(JSON Web Token)认证在Nest.js框架中的应用。文章包含了JWT认证的流程,如何在Nest.js中实现,以及如何创建JWT认证策略。包括了安装依赖,创建处理认证流程的文件,以及如何使用HttpException过滤器来处理未登录访问。
Nest.js 实战 (八):基于 JWT 的路由身份认证鉴权
|
2月前
|
JSON 算法 API
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
|
3月前
|
存储 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
【7月更文挑战第16天】在Flask应用中实现mTLS双向TLS加密认证可增强HTTP通信安全性。步骤包括: 1. 使用OpenSSL为服务器和客户端生成证书和密钥。 2. 配置Flask服务器使用这些证书: - 安装`flask`和`pyopenssl`. - 设置SSL上下文并启用mTLS验证: 注意事项: - 保持证书有效期并及时更新. - 确保证书链信任. - 充分测试mTLS配置.
|
2月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
107 0
|
2月前
|
NoSQL 安全 Java
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
|
2月前
|
安全 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
[flask]使用mTLS双向加密认证http通信
|
2月前
|
关系型数据库 API Go
[golang]在Gin框架中使用JWT鉴权
[golang]在Gin框架中使用JWT鉴权

热门文章

最新文章

下一篇
无影云桌面