You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用客户端凭证授权调用DRF接口返回403错误的求助

问题原因及解决方案

你遇到的403问题确实是默认权限配置导致的——rest_framework.permissions.IsAuthenticated这个权限类要求请求必须关联一个已认证的用户对象,但客户端凭证授权(Client Credential Grant)模式下,生成的Token是和你的OAuth2应用绑定的,并没有关联到具体的用户,所以这个权限会直接拒绝请求。

要解决这个问题,你需要替换成OAuth2 Provider提供的专门针对客户端凭证场景的权限类:

1. 修改全局默认权限

把DEFAULT_PERMISSION_CLASSES替换为TokenHasReadWriteScope,它会校验Token对应的应用是否拥有read和write的scope权限:

REST_FRAMEWORK = { 
    'DEFAULT_AUTHENTICATION_CLASSES': ( 
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication', 
    ), 
    'DEFAULT_PERMISSION_CLASSES': ( 
        'oauth2_provider.contrib.rest_framework.TokenHasReadWriteScope', 
    ), 
}

2. 细粒度权限控制(可选)

如果你的接口只需要读权限,或者需要自定义scope,可以使用TokenHasScope类,并在视图中指定所需的scope:

from rest_framework.views import APIView
from oauth2_provider.contrib.rest_framework import TokenHasScope

class YourAPIView(APIView):
    permission_classes = [TokenHasScope]
    required_scopes = ['read']  # 这里可指定需要的scope,比如['write']或自定义scope

    def get(self, request):
        # 你的接口逻辑
        return Response({"message": "Success"})

额外注意事项

别忘了在Django Admin里创建客户端凭证应用时,给它分配对应的scope(比如read、write),否则即使权限类配置正确,依然会返回403错误。

内容的提问来源于stack exchange,提问作者Hamidreza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:40:08