django复习上

day4~day6

JWT的使用

什么是JWT

jwt token 简单来说就是身份的绑定、认定,便于这个是属于自己的,下次登录,再次确认的身份信息就可以了

认证成功后会保存在session中,用于存储
CSRF:基于cookie进行用户的识别,如果别截获,用户会受到跨域请求伪造的攻击

JWT的流程
· 用户使用用户名密码来请求服务器

· 服务器进行验证用户的信息

· 服务器通过验证发送给用户一个token

· 客户端存储token,并在每次请求时附送上这个token值

· 服务端验证token值,并返回数据
这个token必须要在每次请求时传递给服务端,它应该保存在请求头里, 另外,服务端要支持CORS(``跨来源资源共享``)策略。

JWT的样子
jwt是由三段信息构成的,将他们三个拼接,组合就成了jwt的字符串。例如这个:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

第一部分是头部
由两个组成:
{
‘typ’: ‘JWT’,
‘alg’: ‘HS256’
}
并进行base64编码,其中的‘=’替换为“”“”,为第一部分

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

第二部分就是payload
存放有效信息的地方,重点包含三个部分
· 标准中注册的声明

· 公共的声明

· 私有的声明
标准中注册的声明(建议但不强制使用) :

· iss: jwt签发者

· sub: jwt所面向的用户

· aud: 接收jwt的一方

· exp: jwt的过期时间,这个过期时间必须要大于签发时间

· nbf: 定义在什么时间之前,该jwt都是不可用的.

· iat: jwt的签发时间

· jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

公共的声明: 公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息,但不建议添加敏感信息,因为该部分在客户端可解码.

私有的声明: 私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解码的,意味着该部分信息可以归类为明文信息。
{
“sub”: “1234567890”,
“name”: “John Doe”,
“admin”: true
}
也是同样,进行base64编码,‘=’号替换为“”“”,英文的双引号,得到了的部分。

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

第三部分是 signature(签名)
jwt简单就是一个签名的信息,由三部分组成:
· header (base64后的)

· payload (base64后的)

· secret

这个部分就是需要base64编码后的header和base64编码后的payload使用点(.)进行连接组成字符串,然后header中的加密方式加secret(秘密的)组合加密,在进行base64编码,就构成了第三部分。
把这三部分,连接成一个完成的字符串,就构成了一个完整的jwt。(就如果我上面举的例子)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

注意: secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret,那就意味着客户端是可以自我签发jwt了.

短信验证码

容联云介绍及文档

容联云地址:https://www.yuntongxun.com/

文档:https://doc.yuntongxun.com/p/5a531a353b8496dd00dcdfe2
在这里插入图片描述
在这里插入图片描述
容联云发送短信文档

python SDK文档:https://doc.yuntongxun.com/p/5f029ae7a80948a1006e776e
安装SDK
pip install ronglian_sms_sdk

思路图:在这里插入图片描述

在users应用下新建utils.py, 内部定义发送短信的方法

from ronglian_sms_sdk import SmsSDK

import json
import random

accId = '8a216da8762cb4570176f6b1f0c54906'
accToken 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值