Django OAuth2 和 JWT 案例
Posted August 08, 2017
在重写 Ansible 监控平台时, 需要前后端分离, 并且需要使用公司的账户系统。 而前后端认证我一直采取的 JWT 认证规范,具体为什么这么选择, 这里不多讲。而符合DRF
的JWT 框架, 默认使用的是 Django 自带的账户系统做的。 所以再 OAuth2 和 JWT 结合需要做点工作。
OAuth2认证方法
此步骤主要包含, 从资源服务器交换 Token, 然后根据 token 获取当前用户的 profile 信息, 一般为 email 和 avatar 信息. 然后创建 Django 自带的 User。 也可以通过函数实现。
JWT APIView*
引入的包
由于 OAuth2 返回时仅返回 code, 所以需要在JWTSerializer
中获取此 code 并通过上面方法认证.
默认的 JWT APIView 方法是 POST, OAuth2 Callback URL 是 GET 方式, 所以需要自定义个JWTView
, 目的是通过回调ˇ GET 的方式获得 Code.
绑定到 Serializer
class TeambitionObtainJSONWebToken(TeambitionJWTAPIView):
serializer_class = TeambitionJWTSerializer
teambition_obtain_jwt_token = TeambitionObtainJSONWebToken.as_view()
<\>text
替换默认的签发路径
并把资源服务的应用程序回掉地址改为http://<host:port>/jwt/teambition/obtain