JWT介绍与单点登录

JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。它具备两个特点

  • 简洁(Compact)

可以通过URL, POST 参数或者在 HTTP header 发送,因为数据量小,传输速度快

  • 自包含(Self-contained)

负载中包含了所有用户所需要的信息,避免了多次查询数据库

组成

  • Header 头部

头部包含了两部分,token和加密算法。会进行Base64加密(很容易被反解)

{
  "alg": "HS256",
  "typ": "JWT"
}
  • Payload负载

这部分就是我们存放信息的地方了,你可以把用户 ID 等信息放在这里,JWT 规范里面对这部分有进行了比较详细的介绍,常用的由 iss(签发者),exp(过期时间),sub(面向的用户),aud(接收方),iat(签发时间)。

{
    "iss": "1332 JWT",
    "iat": 1456446565,
    "exp": 1456446565,
    "aud": "www.example.com",
    "sub": "[email protected]"
}
  • Signature 签名

前面两部分都是使用 Base64 进行编码的,即前端可以解开知道里面的信息。Signature 需要使用编码后的 header 和 payload 以及我们提供的一个密钥,然后使用 header 中指定的签名算法(HS256)进行签名。签名的作用是保证 JWT 没有被篡改过。

单点登录
多个子域名通过一个统一的授权认证接口进行登录

  • 安装
pip install djangorestframework-jwt
  • setting配置
REST_FRAMEWORK = {
    
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}
  • path的配置
    # jwt的token认证
    path('jwt-auth/', obtain_jwt_token )

猜你喜欢

转载自blog.csdn.net/qq_34374753/article/details/84249692