关于JWT 的介绍和使用

Json Web Token

最近公司项目在用jwt,感觉以后会再用得到,先写下自己理解的jwt用途范围,方便以后查找。

包、库的引入

用途1:Build a dedicated JWT endpoint for the Support SDK in implementing Zendesk Service

在对接Zendesk 客户服务的时候,Zendesk第三方接口会调用我方接口,获取到JWT token的值,并自动解码随JWT token携带的用户信息,以便进行后续的服务支持。

Zendesk官方文档,JWT token 生成使用说明书:https://develop.zendesk.com/hc/en-us/articles/360001075248#build

上面文档里最重要的用户的四个信息:
name,email,jti,iat 分别代表的意思为:用户名、邮箱、jwtId(自动生成的随机Id)、issueAt(token 的生成时间,毫秒值)。

其次是注意点:
a).第三方获取的方式为请求body里的参数‘user_token’,这是用户登录我方应用后拿到的session,拿去做用户校验,再返回一个jwt token 给请求方.

b).返回的jwt token生成的密文,加密方式须为:HS256.

c).签名使用的钥匙必须用Zendesk官方授权的.

用途2:跨域身份验证

一些需要单点登录需求的网站可能会用到分布式结构的用户身份验证,例如:站点A和站点B提供同一公司的相关服务。现在要求用户只需要登录其中一个网站,然后它就会自动登录到另一个网站。怎么做?

我们这里可以使用JWT的验证功能: 通过客户端保存数据,而服务器根本不保存会话数据,每个请求都被发送回服务器。 JWT是这种解决方案的代表。流程图如下:
在这里插入图片描述
java 对应的使用方法:
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(key)).build(); jwt = verifier.verify(token);

上述包引入的链接中也含有其他语言对应的使用方式。请自行对号寻找:
https://jwt.io/

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Rest Framework(DRF)是一种基于 Django 的 Web 应用程序开发框架,它提供了许多工具和库,使得开发 Web API 更加容易。JWT 是一种基于 JSON 的 Web Token,它用于在网络应用程序和服务器之间传递声明以使身份验证和授权更加安全。在 DRF 中使用 JWT 可以使得 API 更加安全。 JWT 由三个部分组成:头部、载荷和签名。头部通常包含算法和令牌类型的信息,载荷通常包含用户标识信息和令牌的过期时间,签名则是根据头部、载荷和密钥生成的。 DRF 支持 JWT 验证,可以使用第三方库 djangorestframework-jwt 来实现。实现方式如下: 1. 安装 djangorestframework-jwt ``` pip install djangorestframework-jwt ``` 2. 添加 JWT 相关配置到 settings.py 中 ``` REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ], } JWT_AUTH = { 'JWT_SECRET_KEY': SECRET_KEY, 'JWT_ALGORITHM': 'HS256', 'JWT_VERIFY_EXPIRATION': True, 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7), 'JWT_ALLOW_REFRESH': True, 'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30), } ``` 3. 在 urls.py 中添加 JWT 相关路由 ``` from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token urlpatterns = [ url(r'^api-token-auth/', obtain_jwt_token), url(r'^api-token-refresh/', refresh_jwt_token), url(r'^api-token-verify/', verify_jwt_token), ] ``` 4. 在需要验证的视图中添加 @jwt_authentication_classes 装饰器 ``` from rest_framework.decorators import api_view, permission_classes, jwt_authentication_classes from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response @api_view(['GET']) @permission_classes([IsAuthenticated]) @jwt_authentication_classes def my_view(request): content = {'message': 'Hello, World!'} return Response(content) ``` 以上是 DRF 中使用 JWT 的简单介绍JWT 的原理是将用户标识信息和过期时间等信息进行编码,生成一个安全的 token,并将其传递给客户端。客户端在后续的请求中携带这个 token,在服务端进行验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值