JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。它具备两个特点:
可以通过URL, POST 参数或者在 HTTP header 发送,因为数据量小,传输速度快
负载中包含了所有用户所需要的信息,避免了多次查询数据库
一个JWT由三个部分组成:header,payload,signature。
jwt的头部有两部分信息构成:
完整的头部如下:
{
'typ':'JWT',
'alg':'HS256'
}
载荷就是用来存放有效信息的地方。包含三个部分:
JWT的第三部分是一个签证信息,包含三个部分:
首先进行配置(在settings.py中配置)
在INSTALLED_APPS 里注册
INSTALLED_APPS = [
'rest_framework.authtoken',
]
添加配置
JWT_AUTH = {
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_RESPONSE_PAYLOAD_HANDLER':
'myapp.views.jwt_response_payload_handler', # 重新login登录返回函数
}
REST_FRAMEWORK = {
# 身份认证
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
#全局配置JWT验证设置
# 'DEFAULT_PERMISSION_CLASSES': (
# 'rest_framework.permissions.IsAuthenticated',
# ),
}
传入的user是一个序列化后的user对象
# jwt的生成方法
def login_jwt(user):
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
return token
class Hello(APIView):
permission_classes = [AllowAny] # 可以增加多个权限
如果不通过就不会走接口里的代码