JWT 令牌是否存储在与 DRF 令牌相同的 table 中?

Is the JWT token stored in the same table as the DRF token?

我希望有人能解决我在 django_rest_authdjango_rest_framework 中对 JWT 和常规令牌身份验证的困惑。

我正在使用 django_rest_auth 和 JWT (REST_USE_JWT = True)。我正在使用 rest_auth.registration 视图和 rest_auth 视图并将我的默认身份验证 class 设置为 'rest_framework_jwt.authentication.JSONWebTokenAuthentication'.

我已经包含了 rest_auth 中的 urls 并设置了以下 urlurl(r'^api-token-auth/', obtain_jwt_token),来自 rest_framework_jwt 文档。

当我注册一个新用户时,我希望 rest_auth RegisterView 中的以下代码是 运行:

if getattr(settings, 'REST_USE_JWT', False):
    self.token = jwt_encode(self.user)

但是在 Django Admin 中,我看到有 Auth Token table、'Tokens',如果我使用了 Django 的内置令牌身份验证,它的令牌看起来就像一个普通令牌。实际上,当我转到 /rest-auth/login 端点时,它 returns 同样的标记,例如{"key":"6b705cbab083833c38414d4c6e4970c0abbb0c9f"}。但是,当我转到此用户的 api-token-auth/ 端点时,我得到了 JWT 令牌:{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InJvYmVydEByb2JlcnRjaHUuY28udWsiLCJleHAiOjE0NjY2ODI5MjcsInVzZXJfaWQiOjIsInVzZXJuYW1lIjoicm9iZXJ0QHJvYmVydGNodS5jby51ayJ9.IvJIQBY95TrQp3V483GVdpV0fQKedMk9hWEFytMRidU"}

这些密钥和令牌可以互换吗?我可以为同一个用户使用这两个令牌吗?当然,我应该只有一个令牌选项来访问受保护的端点吗?

谢谢。

参见 here and here。 JWT 不应该存储在任何地方,这是 drf 令牌的好处之一——你不会在每个请求上都访问数据库。此外,如果您只想使用 JWT 进行身份验证,您应该摆脱令牌身份验证的端点(drf 附带的端点)。