【问题标题】:Django-React authentication: limit users who can obtain simpleJWT tokensDjango-React 身份验证:限制可以获得 simpleJWT 令牌的用户
【发布时间】:2021-04-21 18:02:38
【问题描述】:

我的后端有两个 React 前端:第一个供所有用户使用,第二个是只能由 is_staff 用户使用的管理面板。

使用 simplejwt 令牌限制访问的最佳方法是什么?

我已覆盖 TokenObtainPairSerializer 以包含额外的字段,例如“is_staff”。

所以我有两个问题:

  1. 只是检查前端的 is_staff 字段就足够安全了吗?在我看来这不是一个好主意。

  2. 如果我想为管理员身份验证创建第二个 API URL 条目并在后端覆盖身份验证逻辑以仅向员工用户颁发令牌。我应该重写什么方法/类来改变它?这是个好主意吗?

【问题讨论】:

  • 传递is_staff 是安全的,如果您确信您的所有 API 都在检查后端的权限。如果要覆盖身份验证逻辑,则必须覆盖rest_framework 的login 视图。首先验证用户,然后检查他是否有员工访问权限,否则抛出 403。这是视图:github.com/encode/django-rest-framework/blob/… 通过在此处检查用户类型

标签: reactjs django jwt


【解决方案1】:

为 django 视图创建 Permission 类,为允许的用户提供访问权限,禁止不允许的用户访问它们。

例如,您当前的逻辑状态是应该只允许 is_staff 用户登录到管理门户。只需添加一个允许或禁止用户登录到您的管理门户的权限类即可轻松完成。如果您对两者都使用单个 JWTAPI,则应在此 API 上使用中间件来检测数据来自何处,因为 _requests.META 包含此数据。您可以使用此 META 数据检测是否允许用户全部进入后端。

【讨论】:

    【解决方案2】:

    在 jwToken 中对 is_staff 进行编码,当用户使用 jwToken 发送请求时,在后端对其进行解码并检查是否 is_staff 用户,然后基于此属性,您可以做任何您想做的事情。

    【讨论】:

      【解决方案3】:

      is_staff 标志可用于前端的视觉检查,但仅限于具有此类权限的用户的视图必须在后端受到保护。

      假设您使用的是 Django Rest 框架,保护您的视图的最佳方法是使用permissions,或更准确地说,custom permissions

      from rest_framework import permissions
      
      class IsStaffUser(permissions.BasePermission):
          def has_permission(self, request, view):
              return request.user and request.user.is_staff
      

      他们

      from rest_framework.permissions import IsStaffUser
      
      class StaffViewModelViewSet(viewsets.ModelViewSet):
          permission_classes = (IsStaffUser,)
      

      更多内容请见:

      Django Rest Framework Staff Only Permissions

      Django Rest Framework Custom Permissions Per View

      Django Rest Framework Permissions

      【讨论】:

      • 权限才是王道!
      猜你喜欢
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2020-05-27
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      相关资源
      最近更新 更多