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

DRF无用户体系下如何实现仅允许已知客户端访问的api-to-api鉴权

DRF api-to-api鉴权实现方案

这个需求完全可以在DRF中实现,DRF的认证体系本身没有强制绑定user模型,适配无用户的api-to-api鉴权场景非常简单。

原生DRF自定义实现(轻量场景首选)

你可以通过自定义认证类快速实现API Key校验逻辑,完全不需要引入用户体系:

  1. 提前为所有可信客户端分配唯一的API密钥,要求客户端请求时将密钥放在自定义请求头(比如X-API-Key)中携带
  2. 新建自定义认证类,校验请求头中的密钥是否属于可信列表,认证通过后返回(None, None)即可(DRF允许无用户的认证结果)
    示例代码如下:
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed

# 生产环境建议将可信密钥存在环境变量、配置文件或独立的数据库表中
ALLOWED_API_KEYS = ["client_xxxxxx_key", "client_yyyyyy_key"]

class APIKeyAuth(BaseAuthentication):
    def authenticate(self, request):
        request_api_key = request.META.get("HTTP_X_API_KEY")
        if not request_api_key or request_api_key not in ALLOWED_API_KEYS:
            raise AuthenticationFailed("Invalid API Key")
        # 无用户场景直接返回两个None即可通过认证
        return (None, None)
  1. 在全局配置或者对应视图中启用该认证类即可:
    全局配置(settings.py)示例:
REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": [
        "你的模块路径.APIKeyAuth",
    ],
    "DEFAULT_PERMISSION_CLASSES": [
        "rest_framework.permissions.IsAuthenticated"
    ]
}

如果有更高安全要求,还可以在自定义认证类中扩展签名校验、时间戳防重放等逻辑。

现成第三方库(复杂场景首选)

有成熟的第三方库可以直接使用,不需要自己从零开发全量逻辑:

  • djangorestframework-api-key:专门为DRF设计的API Key鉴权库,支持API密钥的生成、管理、到期配置、权限范围划分,原生支持无用户的使用场景,完全适配api-to-api鉴权需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:48:03