ReactJS 和 Django 之间的安全身份验证

soc*_*pet 5 authentication django rest reactjs

阅读和观看了很多,并提出了很多关于 ReactJS 和 Django 的问题。

这特别有助于我理解从 Django REST Framework 到 ReactJS 以及从 ReactJS 到 Django REST Framework 的数据流。

Django 表单和前端框架认证(AngularJS/ReactJS)

但是,我想了解的一件事是对 Django REST 框架的身份验证。我从文档中了解到它内置了身份验证。由于这是敏感数据,我显然希望它保护人们只需转到http://www.my_site.com/info/api.

我需要将 ReactJS 设置为唯一可以从 API 请求数据的东西,无论是通过密钥还是用户名/密码凭据。我只是好奇这是如何处理的?显然我不希望在 ReactJS 中进行硬编码,因为它会与 ReactJS 的其余部分一起编译。

KA0*_*A01 7

以下是我的处理方式:我将使用JSON Web Token (JWT)进行身份验证和授权。

您将使用后端来保护所有API 请求免受无效JWT 的攻击,用户没有令牌的路由(即注册/登录页面)除外。

以下是应用程序的流程:

  1. 新用户使用标准凭据(例如电子邮件和密码)注册到您的应用。
  2. 您的后端将创建一个新用户,签署一个新的 JWT 令牌(通常使用用户的 ID)。您可能会使用第三方库来签署/验证令牌(我没有 Django 社区的经验,但我相信快速的 Google 搜索会给您答案)。您的后端将发回此令牌。这是后端唯一一次在注册时收到电子邮件、密码或任何其他敏感信息。
  3. 从现在开始,React 将仅使用此令牌进行授权。React 会将此令牌保存在某处(即localStorage),并将此令牌与请求的其他部分一起发送到您使用后端创建的 API 路由。您将authorization在请求的标头中发送此令牌。
  4. 您的后端将使用第三方库验证此令牌。如果它无效,请求将停止并返回未经授权的错误。如果它是有效的请求继续。

这实现了以下目标:

  1. 您的 API 路由受到未经身份验证的用户的保护
  2. 对您的 API 的每个请求都经过授权用户的验证,以防止任何人请求您的 API 的任何部分。
  3. 您可以通过只允许用户修改他们自己的数据的请求来进一步巩固这一点。例如,通过仅允许带有她的 ID 的令牌来修改她的帐户/数据来保护 Suzy 的个人资料不被她以外的人修改。

重要说明- 您的后端永远不会将这些令牌保存在存储中。它将验证每个请求的令牌。阅读有关JSON Web 令牌 (JWT)及其工作原理的更多信息。