认证

因为HTTP协议是无状态的,所以互联网服务离不开用户认证。

一般流程是下面这样:

1、用户向服务器发送用户名和密码。

2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。

3、服务器向用户返回一个 session_id,写入用户的 Cookie。

4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。

5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

上面用的是Session实现方式,相对来说较安全。但如果需要持久化,则对服务器压力比较大

如果用Cookie实现方式,不够安全,且空间较小

针对以上情况,出现了JWT(Json Web Token)的认证方式

JWT 的原理

,服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样:

{
  "姓名": "张三",
  "角色": "管理员",
  "到期时间": "2018年7月1日0点0分"
}

以后,用户与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。

服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。

JWT 的使用

在restframework中的使用

安装:pip install djangorestframework-jwt

配置:

REST_FRAMEWORK = {
...

    'DEFAULT_AUTHENTICATION_CLASSES': (                   #使用自带的认证组件
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

设置过期时间等等:

JWT_AUTH = {       # 设置jwt的过期时间等等
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'common.utils.jwt_response_payload_handler',
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=3600),            #设置过期时间60分钟
    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=1),
    'JWT_AUTH_HEADER_PREFIX': 'Token',
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值