Django rest framework jwt集成django drf

Django rest framework jwt集成django drf,django-rest-framework,django-rest-framework-jwt,Django Rest Framework,Django Rest Framework Jwt,我试图在我的django应用程序上实现jwt,但我有一些困惑 当我使用电子邮件通行证向邮递员发出邮寄请求时: http:www.127.0.0.1:8000/token/ 我获得刷新和访问令牌: { "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU3NDUwMTcxNSwianRpIjoiNDg5YjjZmQyY2IwNDI4YjgxMzg4NDU1YmQ1Z

我试图在我的django应用程序上实现jwt,但我有一些困惑

当我使用电子邮件通行证向邮递员发出邮寄请求时:

http:www.127.0.0.1:8000/token/
我获得刷新和访问令牌:

{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU3NDUwMTcxNSwianRpIjoiNDg5YjjZmQyY2IwNDI4YjgxMzg4NDU1YmQ1ZGM3NDYiLCJ1c2VyX2lkIjo2fQ.5Bms8FiqOdlIeyi1k1cRcfLC1qmHEH05MysZnzMcKCA",
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTc0NDE1NjE1LCJqdGkiOiI1OTBkMGjZjJlYmE0YjNmOTE1MzI5NTEyOGExNzUyMCIsInVzZXJfaWQiOjZ9.7HZYpD-mCp5li4PnGSuwQGyVa7nsDYvUVWaxdyKYk-E"
}
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo2LCJ1c2VybmFtZSI6ImFrYXNAbWFpbC5jb20iLCJleHAiOjE1NzQ0MTU4NTYsImVtYWlsIjoiYWthc0BtYWlsLmNvbSIsIm9yaWdfaWF0IjoxNTc0NDE1Nzk2fQ.DEpZNq-kFFqYb3ZfAiYDB1CigfY36qpS9o-T7rJ5-_I",
"user": {
    "email": "akas@mail.com",
    "password": "pbkdf2_sha256$150000$OdHDeKGCViax$BvOXGFheSJoNb692ZVYxoWnZxK2xZQpvbu7HA/SC5Po="
       }
 }
当我做这个的时候:

http:www.127.0.0.1:8000/rest-auth/login/
我获得访问令牌:

{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU3NDUwMTcxNSwianRpIjoiNDg5YjjZmQyY2IwNDI4YjgxMzg4NDU1YmQ1ZGM3NDYiLCJ1c2VyX2lkIjo2fQ.5Bms8FiqOdlIeyi1k1cRcfLC1qmHEH05MysZnzMcKCA",
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTc0NDE1NjE1LCJqdGkiOiI1OTBkMGjZjJlYmE0YjNmOTE1MzI5NTEyOGExNzUyMCIsInVzZXJfaWQiOjZ9.7HZYpD-mCp5li4PnGSuwQGyVa7nsDYvUVWaxdyKYk-E"
}
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo2LCJ1c2VybmFtZSI6ImFrYXNAbWFpbC5jb20iLCJleHAiOjE1NzQ0MTU4NTYsImVtYWlsIjoiYWthc0BtYWlsLmNvbSIsIm9yaWdfaWF0IjoxNTc0NDE1Nzk2fQ.DEpZNq-kFFqYb3ZfAiYDB1CigfY36qpS9o-T7rJ5-_I",
"user": {
    "email": "akas@mail.com",
    "password": "pbkdf2_sha256$150000$OdHDeKGCViax$BvOXGFheSJoNb692ZVYxoWnZxK2xZQpvbu7HA/SC5Po="
       }
 }
然后,我可以在头授权中添加此访问令牌时发出get请求


我不明白这两个访问令牌之间有什么区别?

您的第一对令牌无效,并且它们在结构上与您的第二个令牌非常不同

JWT有三个部分,由周期分隔。(具有完整规格)第一部分是标题;第三部分是签名;但中间部分是一组声明,这才是代币真正有趣的内容。前两部分是base64编码的,因此您可以对它们进行解码以查看其内部内容。您的第一个访问令牌的声明如下

{"token_type":"access","exp":1574415615,"jti":"590d0hٌ?X?M?َLML̎MLL?LM?L?\?\???
但第二个是

{"user_id":6,"username":"akas@mail.com","exp":1574415856,"email":"akas@mail.com","orig_iat":1574415796}
这向我表明,您的应用程序中有两个不同的JWT实现,而且其中一个配置错误;因为第一个令牌不能被解码为JSON,所以它不能被有效地使用

还有一件有趣的事情可能是调试时的提示。如果我把你的访问令牌复制到头版上的解码器中,然后在令牌的中间删除字符<代码> jZJ < /代码>,那么我得到

{
  "token_type": "access",
  "exp": 1574415615,
  "jti": "590d0beba4b3f9153295128a17520",
  "user_id": 6
}
这(直到签名)可能有效。不过,这两种代币之间的不同说法看起来仍然很奇怪


“jti”
是令牌唯一标识符的标准声明;它最有用的应用是保留已撤销令牌的黑名单。还有一个标准的
“sub”
声明,标识令牌的主题,该主题可能会取代您的
“user\u id”

是的,我得到如下:{“token_type”:“access”,“exp”:157442563,“jti”:“5D767446E5374B299D3928D0BA41474”,“user_id”:6}我还有两个实现jwt和简单jwti不知道我应该使用localhost:8000/token获得token吗