1

我正在努力理解应该如何在 Django 中实现基于 JWT 的身份验证(我使用的是 simplejwt)。我只是一个初学者,所以请为一些愚蠢的问题做好准备。rest-framework-simplejwt 文档非常少,并没有为像我这样的新手提供足够的细节。

path('token/obtain', jwt_views.TokenObtainPairView.as_view(), name='token_create'),
path('token/refresh', jwt_views.TokenRefreshView.as_view(), name='token_refresh'),

因此,我按照官方文档的建议在 urls.py 中创建了路径。我从这里去哪里?我想我的困惑来自这样一个事实,即我不确定我必须在代码中的确切位置发布我的令牌。假设我正在登录用户。那么,为了获得令牌,我是否必须从视图内部向“token_create”端点发送请求?还是我必须以某种方式在我的序列化程序之一中指出它?'refresh_token' 端点呢?我需要使用特定的方法吗?

那么,令牌发行后我该怎么办?显然,我不应该将它保存在数据库中,因为它首先破坏了使用 JWT 的全部目的。据我了解,我应该将其附加到标头,以便用户的后续请求包含标头中的令牌。

前端将使用 ReactJS 编写,并将位于与我的 Django 后端 API 不同的服务器上,两者之间的通信将通过 CORS 进行配置。

在这种情况下,如何将令牌附加到标头并使其使用户的浏览器在每个请求中发送令牌?是否有某种可能对此有用的软件包?

4

1 回答 1

1

我想你只是把一切都搞混了,我会解释一切,但你可能已经知道一些东西。

JWT 只是一种授权用户的方式,您通常创建一个端点来为用户创建一个令牌,这个端点可以命名为logincreate_token、 'generate_token' 或任何东西!真的没关系!

但是,如果您使用特定的库,可能会迫使您使用特定的端点,但这Flask确实是您喜欢的。

这个login(无论你怎么称呼它)端点将获取用户名和密码并检查它是否存在且正确,然后使用PyJWT 之JWT类的库生成一个,您可以将 JWT 配置为在 20 分钟或更长时间内过期,然后您加密一个(JSON?),它通常包含您从数据库中查询的内容。您提供给用户的 JSON 示例:dictionaryuser_id

{
  "user_id": something,
  "role": something,
  ...
}

然后它将被加密为一个长字符串。

现在,当用户发送请求时,他/她需要将那个长字符串作为Authorization请求的标头。

postman --> Authorizations中,选择Bearer Authorization然后插入该长字符串。

我们还给用户一个refresh_token.

login这是您在用户调用端点时向用户提供的 JSON 示例:

{
 token: some_long_string,
 refresh_token: some_long_string,

}

那么什么是刷新Token呢?

只是当主令牌过期而不是让用户再次输入用户名和密码时,他只是发送我们在他调用时给他的刷新令牌login

还有一点:这是您需要实现的整个流程和逻辑。随心所欲,图书馆或任何你喜欢的东西,并不重要。

于 2021-02-03T07:41:45.133 回答