在 Django 中使用 JWT 令牌进行身份验证

Posted

技术标签:

【中文标题】在 Django 中使用 JWT 令牌进行身份验证【英文标题】:Authenticating with JWT token in Django 【发布时间】:2017-02-04 01:41:50 【问题描述】:

我是 Django 的初学者,我正在从这里学习 JWT 令牌。

https://jpadilla.github.io/django-rest-framework-jwt/#rest-framework-jwt-auth

我已经在我的settings.py中设置好了。

REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES':
    (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),

    'DEFAULT_MODEL_SERIALIZER_CLASS':
        'rest_framework.serializers.ModelSerializer',

    'DEFAULT_PERMISSION_CLASSES':
    (
        'rest_framework.permissions.IsAuthenticated',
    )

如果我卷曲,我实际上会取回我的令牌。

curl -X POST -d "username=khant&password=khant" http://127.0.0.1:8000/api-token-auth/

但是当我访问受保护的网址时,

curl -H "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImtoYW50IiwidXNlcl9pZCI6OCwiZW1haWwiOiJraGFudEBnbWFpbC5jb20iLCJleHAiOjE0NzQ5MDQxNTJ9.jaZ3HwsXjx7Bk2ol5UdeE8UUlq4OEGCbnb1T8vDhO_w" http://127.0.0.1:8000/dialogue_dialoguemine/

当我从网络访问时,它总是这样说。本地主机对我来说没问题。

"detail":"未提供身份验证凭据。"

在我受保护的 url 中,我只是编写简单的 api 来查询。我可以知道如何解决这个问题吗?

class DialogueMineView(generics.ListAPIView):
    permission_classes = (IsAuthenticated,)

    serializer_class = DialogueSerializer
    paginate_by = 2

    def get_queryset(self):

        user = self.request.user
        return Dialogue.objects.filter(owner=user)

【问题讨论】:

你做对了,请再次检查你在 curl 中输入或编码。 我还是卡住了。我应该如何排除故障? 【参考方案1】:

我现在知道了。就我而言,我不仅在网络上还可以。我从这个链接检查。

Django Rest Framework - Authentication credentials were not provided

它说我需要添加

WSGIPassAuthorization On

在我的 apache 目录中的 httpd.conf 中。现在好了。

【讨论】:

你在哪里添加了 WSGIPassAuthorization On?

以上是关于在 Django 中使用 JWT 令牌进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

JWT 身份验证:使用 UI 令牌对 Graphene/Django (GraphQL) 查询进行身份验证?

Django Rest Framework 不接受 JWT 身份验证令牌

使用 otp 获取 api 令牌的 Django REST 框架的 JWT 身份验证

带有 okta OAUTH 令牌身份验证的 Django Rest API

Django Rest Framework 避免身份验证 JWT

如何在 django rest 框架中验证 jwt 身份验证中的令牌