jwt方式进行登录验证

一般Web应用开发验证用户信息有两种方式,一是使用session,二是使用token。

为什么要用Token

  1. Token无需存储降低服务器成本,session是将用户信息存储在服务器中的,当用户量增大时服务器的压力也会随着增大。
  2. 防御CSRF跨站伪造请求攻击,session是基于cookie进行用户识别的, cookie如果被截获,用户信息就容易泄露。
  3. 扩展性强,session需要存储无法共享,当搭建了多个服务器时其他服务器无法获取到session中的验证数据用户无法验证成功。而Token可以实现服务器间共享,这样不管哪里都可以访问到。
  4. Token可以减轻服务器的压力,减少频繁的查询数据库。
  5. 适用于移动平台应用

基于 Token 的身份验证流程

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求开始验证用户名与密码
  3. 验证成功后,服务端生成一个 Token并把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,可以存放在 Cookie 里或者 Local Storage 里
  5. 客户端再次向服务端请求资形式源的时候携带服务端生成的 Token发送给服务器
  6. 服务端收到请求,然后去验证客户端请求里面携带的 Token,如果验证成功,就向客户端返回请求的数据,否则拒绝请求。

Token的组成形式

JWT 标准的 Token 有三个部分(面试被问到过):

1. header(头部)

每个 Token 里面都有一个 header,也就是头部数据,里面包含了使用的算法告诉我们这个token 是否加密。如果是未加密的 Token ,这个属性可以设置成 none。

2. payload(数据)

Payload 里面是 Token 要包含的一些数据,内容可以自行定义,也可以参考标准字段(简写:全称)iss:Issuer、sub:Subject、exp:Expiration time、iat:Issued at。

3. signature(签名)

将Header和Playload使用Base64编码生成一下再加入签名字符用加密算法加密一遍,得到唯一的签名,用来防止其他人来篡改Token中的信息。

使用jwt

1. 安装django-rest-framework依赖包

pip install djangorestframework
pip install djangorestframework-jwt
pip install django-cors-headers

2. 配置settings.py文件

NSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework.authtoken',  # 设置token
    'corsheaders',
    ...
]
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    ...
]
import datetime
JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),#设置token过期时间
    'JWT_AUTH_HEADER_PREFIX': 'JWT',
}

3. 修改使用jwt验证的URL

#jwt中间件的三个方法分别是获取token,刷新token和验证token 登录验证就用获取token的obtain_jwt_token
from rest_framework_jwt.views import obtain_jwt_token,refresh_jwt_token,verify_jwt_token

url(r'^login/', obtain_jwt_token),

4. Views里设置token验证
前端需要将{Authorization: JWT token}保存在headers中传递到后端进行验证

class TestViewset(viewsets.ModelViewSet):
    # 标记需要进行jwt验证
    authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) 
    # 权限验证
    permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
    serializer_class = TestSerializer
    lookup_field = "test_id"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值