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

Django DRF 如何配置Swagger文档强制登录访问限制

DRF Swagger 文档访问权限配置方案

当前配置下文档完全公开的核心原因有两点:一是get_schema_view中public=True参数会跳过权限校验生成公开全量接口文档,二是permission_classes配置了permissions.AllowAny放通了所有匿名用户访问。按以下步骤修改即可实现权限管控:

1. 修改urls.py核心配置

调整schema_view的两个关键参数,替换权限校验规则:

# 引入你需要的权限类,这里以「仅登录管理员可访问」为例
from rest_framework.permissions import IsAuthenticated, IsAdminUser
# 如需自定义权限(比如仅拥有特定权限码的用户可访问),可参考后面的自定义类写法

schema_view = get_schema_view(
    openapi.Info(
        title="API Docs",
        default_version='v1',
        description="beautiful and long text",
        license=openapi.License(name="BSD License"),
    ),
    public=False, # 改为False,文档不再公开,会根据访问用户的权限过滤可见接口
    permission_classes=[IsAuthenticated, IsAdminUser], # 替换为你需要的权限类组合
)

自定义权限示例(比如仅持有api_docs.access权限的用户可访问):

from rest_framework.permissions import BasePermission

class AllowDocsAccess(BasePermission):
    def has_permission(self, request, view):
        return request.user.is_authenticated and request.user.has_perm('api_docs.access')

写完后把permission_classes替换为[AllowDocsAccess]即可。

2. 适配认证方式(可选)

如果你的项目默认使用Session认证(比如对接Django Admin登录),现有配置已经可以正常工作:未登录用户访问文档地址时会自动跳转到登录页,登录后权限校验通过即可查看文档。
如果项目使用JWT/Token等Header认证方式,可调整settings.py中的Swagger配置适配:

SWAGGER_SETTINGS = {
    'SHOW_REQUEST_HEADERS': True,
    'SECURITY_DEFINITIONS': {
        'Bearer': {
            'type': 'apiKey',
            'name': 'Authorization',
            'in': 'header',
        }
    },
    'USE_SESSION_AUTH': False, # 不需要Session登录弹窗时设为False,用户可直接在Swagger页点Authorize填入Token
    'JSON_EDITOR': True,
    'SUPPORTED_SUBMIT_METHODS': [
        'get',
        'post',
        'put',
        'delete',
        'patch'
    ],
    # 如需自定义登录/退出跳转地址,可加以下配置
    # 'LOGIN_URL': '/your-login-path/',
    # 'LOGOUT_URL': '/your-logout-path/',
}

效果验证

配置重启服务后:

  • 未登录、无权限用户访问/swagger/、/redoc/地址时会直接返回403无权限,或跳转到登录页
  • 有权限的用户可正常访问文档,且文档中仅展示当前用户有权限调用的接口,不会泄露无权限接口信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:27:25