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

简介:



在项目开发过程经常对接其他系统和被其他系统对接,发现很多系统都有一套自己的鉴权规则,还不提供库或代码,只有文字描述,经常需要自己实现鉴权方法,这真是太低效了。本文介绍一个在项目中使用一个成熟稳定的开源框架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的编码和解码的测试和验证。
 
下面是工具截图:
 
 
 

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参数中即可。示例如下:
目录
相关文章
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
12月前
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
723 89
|
12月前
|
Linux C语言 iOS开发
C语言结合AWTK开发HTTP接口访问界面
这样,我们就实现了在C语言中使用libcurl和AWTK来访问HTTP接口并在界面上显示结果。这只是一个基础的示例,你可以根据需要添加更多的功能和优化。例如,你可以添加错误处理机制、支持更多HTTP方法(如POST、PUT等)、优化用户界面等。
628 82
|
9月前
|
存储 Rust 安全
Rocket框架JWT鉴权实战:保护Rust Web API的安全方案​
本篇文章是基于rust语言和rocket依赖实现网页JWT认证和鉴权,完成简单的JWT token的验证和鉴权处理,使用cargo做依赖的导入和测试。
396 0
|
9月前
|
算法 安全 网络安全
https 的加密过程
HTTPS通过SSL/TLS协议实现安全通信,结合非对称加密与对称加密技术。客户端与服务器协商加密套件,验证证书后生成主密钥用于后续数据加密传输,确保身份真实、数据保密与完整。
2387 1
|
JSON API 网络架构
HTTP常见的请求方法、响应状态码、接口规范介绍
本文详细介绍了HTTP常见的请求方法、响应状态码和接口规范。通过理解和掌握这些内容,开发者可以更好地设计和实现W
2068 83
|
9月前
|
JSON 运维 网络协议
做短信接口时,http接口和cmpp接口怎么选?
本文介绍了短信接口中HTTP与CMPP协议的区别及适用场景,帮助开发者根据业务需求选择合适的接口类型。
1007 1
|
10月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1377 23
|
10月前
|
安全 网络安全 流计算
修改代码以确保对SSL和HTTP异常的正确处理。
记得,在海上和代码世界里,风暴总是突如其来。但只要你的代码准备妥当,合理地处理SSL和HTTP异常,你的小船就能安全航行,最终到达它的目的地。
209 12
|
12月前
|
XML 网络协议 程序员
Apipost接口调试全解:从HTTP到gRPC,程序员必备的“协议生存指南
Apipost是一款强大的接口调试工具,支持多种主流API协议。它涵盖HTTP/HTTPS、WebSocket、Socket.IO、gRPC、GraphQL、TCP及ISO8583金融报文等冷门协议。通过Body多样化、全局参数配置、性能分析等功能优化HTTP调试;提供WebSocket多消息存档与事件监听;gRPC支持服务反射和流式调试;GraphQL可自动生成Schema;TCP报文模板专业精准;SSE配置简单。此外,Apipost还具备环境变量、脚本加持和文档生成功能,是提升开发效率的全能工具。

热门文章

最新文章