如何在Django rest框架中认证API请求(匿名用户)



API请求将由匿名用户发送。没有登录/注册功能。

我需要验证API请求,我尝试的一种基本方法是在每个请求中发送一个验证密钥。这个认证密钥I作为常量保存在Angular前端。

一定有更好更成熟的方法,恳请帮助!

Django REST框架在很大程度上假设请求是基于用户进行身份验证的,但它们确实提供了对身份验证匿名请求的支持。虽然这在很大程度上打破了"身份验证"意味着"验证(Django)用户是真实的"的假设,但Django REST框架确实允许它发生,只是代替了AnonymousUser

DRF中的身份验证可以定义请求上的request.user(经过身份验证的用户)和request.auth(如果适用,通常是使用的令牌)属性。因此,对于您的身份验证,您将持有您创建的令牌(在模型中或其他地方),这些令牌将被验证,而不是用户凭据,并且您最终不会设置用户。

from django.contrib.auth.models import AnonymousUser
from rest_framework import authentication
from rest_framework import exceptions
class ExampleAuthentication(authentication.BaseAuthentication):
    def authenticate(self, request):
        auth = authentication.get_authorization_header(request)
        if not auth or auth[0].lower() != b'token':
            return None
        if len(auth) == 1:
            msg = _('Invalid token header. No credentials provided.')
            raise exceptions.AuthenticationFailed(msg)
        elif len(auth) > 2:
            msg = _('Invalid token header. Credentials string should not contain spaces.')
            raise exceptions.AuthenticationFailed(msg)
        try:
            token = Token.objects.get(token=auth[1])
        except Token.DoesNotExist:
            raise exceptions.AuthenticationFailed('No such token')
        return (AnonymousUser(), token)

此示例假设您有一个Token模型,该模型存储将进行身份验证的令牌。如果请求被正确验证,令牌对象将被设置为request.auth

阅读关于身份验证的其他api文档及其教程-它们提供了对选项的可靠介绍。

相关内容

  • 没有找到相关文章

最新更新