标签: django-rest-framework-simplejwt

Django 通道 JWT 身份验证

我正在尝试访问 Consumer.py 范围内的用户,并从数据库中获取一些与用户相关的模型。AuthMiddlewareStack但是,我用于验证所有 Websocket 连接的方式似乎无法正常工作。

django-rest-framework-simplejwt当我在 REST 框架中使用 JWT 令牌进行身份验证时,能够在 django 通道中验证 Websocket 连接的最佳/安全方法是什么?

django jwt django-channels django-rest-framework-simplejwt

13
推荐指数
2
解决办法
7214
查看次数

调用decode()时需要传入“algorithms”参数的值

以下页面是项目代码: If i am using token = jwt.encode(payload,'secret', algorithm='HS256').decode('utf-8')statements then

“str”对象没有属性“decode”

发生错误。另外,当我删除并使用它而不.decode('utf-8')继续使用进一步的代码时。它工作正常。但是当我申请的时候payload = jwt.decode(token, 'secret', algorithm=['HS256'])

然后

调用decode()时需要传入“algorithms”参数的值”

正在发生上述错误。请帮助我纠正这个错误。这是前面提到的错误,应该纠正调用decode() 时的算法参数错误。

查看页面:

from django.http import request, response
from django.shortcuts import render
from rest_framework import serializers
from rest_framework.views import APIView
from myusers.serializers import UserSerializer
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.response import Response
from .models import User
import jwt, datetime
# Create your views here.
class RegisterView(APIView):
    def post(self,request):
        serializer = UserSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)

class LoginView(APIView):
       def …
Run Code Online (Sandbox Code Playgroud)

django django-models jwt django-rest-framework django-rest-framework-simplejwt

13
推荐指数
1
解决办法
1万
查看次数

从 Django Rest 框架中的访问令牌获取用户详细信息 -simple JWT

我正在一个项目中使用 React 和 Django Rest 框架。我使用 Django Rest 框架简单 JWT 进行身份验证。现在,我想在用户登录后在导航栏中显示用户名。那么,简单的 JWT 是否有一种方法可以从身份验证后生成的访问令牌返回用户详细信息,就像 Djoser 在提供访问令牌时返回用户凭据一样?

抱歉,如果这个问题很愚蠢,但我无法在任何地方找到解决方案。

django-rest-framework django-rest-framework-simplejwt

11
推荐指数
1
解决办法
1万
查看次数

Django drf simple-jwt authentication"detail": "没有找到具有给定凭据的活动帐户"

我正在使用带有自定义用户的 django-rest_framework_simple-jwt 实现用户身份验证,我的 models.py:

class UserManager(BaseUserManager):
    def create_user(self, email, username, password, alias=None):
        user = self.model(
        email = self.normalize_email(email),
                username = username,)
        user.set_password(password)
        user.save()
        return user
   def create_superuser(self, email, username, password):
       self.create_user(email, username, password)
       user.is_staff()
       user.is_superuser = True
       user.save()
       return user

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(null=False, unique=True)
    username = models.CharField(max_length=25, unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    objects = UserManager()
    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["username",]
Run Code Online (Sandbox Code Playgroud)

所以我正在实现restframework simple-jwt身份验证,我的设置.py如下:

REST_FRAMEWORK={
  'DEFAULT_AUTHENTICATION_CLASSES': [
      'rest_framework_simplejwt.authentication.JWTAuthentication',
   ]}
Run Code Online (Sandbox Code Playgroud)

我的 urls.py:

urlpatterns = [
       url(r'^api/token/$', TokenObtainPairView.as_view(), …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework django-rest-framework-simplejwt

10
推荐指数
2
解决办法
7232
查看次数

如何使用 DRF djangorestframework-simplejwt 包将 JWT 令牌存储在 HttpOnly cookie 中?

我已经使用了djangorestframework-simplejwt一段时间,现在我想将 JWT 存储在 cookie 中(而不是本地存储或前端状态),以便客户端发出的每个请求都包含令牌。

因此,我对此进行了一些研究,我发现的最相关的结果是这个 stackoverflow 问题,其中作者使用的djangorestframework-jwt包有一个名为 cookie 的预配置设置JWT_AUTH_COOKIE。因此想切换到该软件包,但最终发现该软件包几乎已经死了

虽然有一个建议使用的分叉djangorestframework-jwt,但我想知道是否可以用其djagnorestframework_simplejwt本身来设置 HttpOnly cookie 中的 JWT?

django django-rest-framework django-rest-framework-jwt django-rest-framework-simplejwt

10
推荐指数
3
解决办法
1万
查看次数

Django Rest Framework - 使用会话和令牌身份验证

我正在尝试使其正常工作,但不知道这是否可行。它应该这样做。

我开发使用一个Web应用程序Django+ Rest-Framework+ jQuery,我想有一个外部应用程序使用相同的RESTAPI,使用JWT Tokens进行身份验证。

我现在的配置是这样的。

设置.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    'DEFAULT_RENDERER_CLASS': [
        'rest_framework.renderers.JSONRenderer',
    ]
}

SIMPLE_JWT = {
    'AUTH_HEADER_TYPES': ('Bearer',),
    }
Run Code Online (Sandbox Code Playgroud)

视图.py

class ListFileView(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request, *args, **kwargs):
        user = request.user

        if user:

            obj = Foo.objects.filter(owner=user)
            serializer = FooSerializer(obj, many=True)
            data = serializer.data

            return Response(data, status=status.HTTP_200_OK)

        return Response({'detail': 'You have no access to files.'}, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

棘手的部分是,当我使用:

permission_classes = (IsAuthenticated,)
Run Code Online (Sandbox Code Playgroud)

我可以ajax从外部应用程序(使用有效JWT …

python django django-rest-framework django-rest-framework-simplejwt

9
推荐指数
1
解决办法
9531
查看次数

实现djangorestframework-simplejwt无密码令牌认证

我的应用程序不需要密码,因为我想使用电话和 OTP 登录。我正在尝试实现自定义简单 JWT 令牌身份验证,该身份验证仅需要电话号码而无需密码。我是 Django 新手,我确实检查了 stackoverflow 中的一些链接并尝试了以下操作:

class CustomSerializer(TokenObtainPairSerializer):

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields[self.username_field] = serializers.CharField()
    del self.fields['password']



def validate(self,attr):
    print(attr)
    
    data = super().validate(attr)
    token = self.get_token(self.user)
    print (token)
    try:
        request = self.context["request"]
        print(request)
    except KeyError:
        pass
    request_data = json.loads(request.body)
    print(request_data)
 
Run Code Online (Sandbox Code Playgroud)

因此,当执行 validate 方法时,它会执行 validate TokenObtainPairSerializerinit 方法,该方法又调用其父类的 init 方法来验证密码。因此,即使我在自定义序列化程序中删除密码字段,它仍然会给我一个密码密钥错误。我尝试传递密钥错误,但再次失败request.body

我被困在这个问题上,我不知道如何实现没有密码的简单 JWT。

django django-rest-framework django-rest-framework-simplejwt

8
推荐指数
1
解决办法
7484
查看次数

ModuleNotFoundError:没有名为“rest_framework_simplejwt.token_blacklistauthentication”的模块

我遇到了由 simplejwt 框架引起的错误。

ModuleNotFoundError: No module named 'rest_framework_simplejwt.token_blacklistauthentication'
Run Code Online (Sandbox Code Playgroud)

我想将使用过的刷新令牌列入黑名单(刷新后)。simplejwt 工作完美,但似乎存在一个由以下原因引起的问题'rest_framework_simplejwt.token_blacklist'

这是我的rest_framework配置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated', 
     ],
      'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ]
}
Run Code Online (Sandbox Code Playgroud)

django-rest-framework django-rest-framework-simplejwt

8
推荐指数
2
解决办法
2万
查看次数

Django Rest Framework 应用程序安全准备生产(身份验证和管理面板)

介绍

我构建了一个具有多种服务的网络应用程序:

  • 前端(反应)
  • 后端(API 和管理面板)(Django Rest Framework + 简单的 jwt 身份验证)
  • Redis、DB、Nginx 等
  • Kubernetes集群

该应用程序并不小,只有 60k 多行代码。这是一家初创公司。我提到它是为了让你知道我可能根本不会受到黑客或流量的那么多关注。这样我就有了逐步提高的空间。

身份验证是通过 DRF simple jwt 库完成的。访问权限+刷新令牌过期。

问题陈述

我做了安全审计,从安全架构的角度发现了缺陷。我不知道这些问题有多重要,我应该如何解决它们,或者以后可以解决哪些问题。所以我正在寻求解决方案和建议。我更喜欢速度和质量之间的最佳比例,而不是仅仅质量(如果我错过了这一点,请告诉我),因此,如果某件事是“很好有”而不是“重要”,我会将其放入下一个版本的积压中。

实际问题列表

如果您愿意,我们可以通过其编号来参考。

#1 身份验证方法

我当前的设置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
    .....

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我有 3 种方法。JWT 可以,但 BasicAuthentication 和 SessionAuthentication 似乎不行。我想要实现的是拥有真正的 JWT 身份验证,并作为 API 视图的唯一身份验证方式(我确实相信我拥有它,直到我发现相反的情况)。

据我了解(可能是错误的),我在生产环境中不需要 SessionAuthentication 和 BasicAuthentication,但我在开发环境中需要,因为它允许我使用登录表单登录 DRF API UI,这对于测试来说很酷。我的说法正确吗?

#2 会议

当我使用 Chrome 开发工具并检查 cookie 时,我感到很沮丧。此时,我在测试中弃用了 SessionAuthentication 和 BasicAuthentication。

在此输入图像描述

据我了解,由于 SessionMiddleware,我拥有会话 id cookie。拥有它是可以的,因为它仅用于管理面板身份验证,并且被 DRF API 视图忽略, …

security django jwt django-rest-framework django-rest-framework-simplejwt

8
推荐指数
1
解决办法
1282
查看次数

对于 Django DRF 后端来说,是否有一种身份验证方法更安全?

我想使用最安全的方法将登录的用户会话存储在 cookie 中。后端是基于 Django 和 DRF 构建的,因此我在用于令牌身份验证的 simplejwt 插件或 djangos 默认 SessionAuth 之间进行选择。前端不是 SPA,但最终也会有一个移动应用程序。所以我一直倾向于令牌身份验证,将它们存储在寿命较短的 httpOnly cookie 中。但那时,我想知道我是否本质上只是以一种迂回的方式进行会话身份验证?

对于该应用程序,一个比另一个更好(就安全性而言)?

django-authentication django-sessions django-rest-framework django-rest-framework-jwt django-rest-framework-simplejwt

7
推荐指数
1
解决办法
2242
查看次数