Skip to main content
 首页 » 编程设计

python之如果使用 'AllowAny' 权限类,如何防止 Django Rest Framework 验证 token

2025年04月02日35zfyouxi

让我先给你看我的代码:

在settings.py

.... 
DEFAULT_AUTHENTICATION_CLASSES': ( 
    'rest_framework.authentication.TokenAuthentication', 
), 
'DEFAULT_PERMISSION_CLASSES': ( 
    'rest_framework.permissions.IsAuthenticated', 
) 
.... 

我的my_view.py:

@api_view(['POST']) 
@permission_classes((AllowAny,)) 
def say_hello(request): 
    return Response("hello") 

如您所见,我默认使用 token 身份验证来保护我的其他 API,但是当我在 say_hello 中添加 token header 时,Django Rest Framework 将还要检查 token 是否有效,即使我添加了 AllowAny 权限类。

我的问题是如果 say_hello 中存在 token header ,如何让 Django Rest Framework 忽略检查 token ? 这样做有什么安全考虑吗?

谢谢。

请您参考如下方法:

您似乎混淆了身份验证和授权。

通过在您的 View 上使用 @permission_classes 装饰器,您已经覆盖了设置中的默认授权。但是您仍然拥有来自设置的默认身份验证类。

尝试在您的 View 中添加另一个装饰器,以绕过 TokenAuthentication:

@authentication_classes([]) 

请注意,如果您将它放在 POST 端点上,您的应用现在很容易受到诸如跨站点请求伪造之类的攻击。