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

本地/开发环境下如何跳过不可修改的FastAPI Security依赖验证?

解决FastAPI本地环境跳过Security权限验证的问题

问题背景

原FastAPI端点通过Security依赖validate_roles做权限验证,该函数依赖decode_token解析令牌。需求是在local环境下跳过验证直接返回模拟令牌,但无法修改validate_roles函数。之前尝试的异步切换函数报错:<coroutine object env_aware_validate_roles> is not a callable object。

错误原因

之前的实现错误地将异步函数直接作为Security的依赖,且函数内部返回lambda或原函数,不符合FastAPI依赖的工作逻辑——Security需要的是一个能直接返回目标值(此处为AccessToken实例)的可调用依赖,而非协程对象或函数引用。

解决方案

方案一:异步环境感知依赖函数

直接编写异步依赖函数,根据环境分支处理逻辑:

async def env_aware_validate_roles(
    security_roles: SecurityScopes,
    access_token: AccessToken = Depends(decode_token)
):
    if settings.ENVIRONMENT.lower() != 'prod':
        # 本地环境返回模拟令牌,跳过解码
        return AccessToken(
            roles=["user.access"], 
            iss="https://login.microsoftonline.com/<tenant_id>/v2.0",
            aud="<app id>"
        )
    else:
        # 生产环境调用原验证函数,传入所需参数
        return await validate_roles(security_roles, access_token)

在端点中使用该依赖:

@api_router.post(path="/request")
def post_request(
    request_body: RequestBody,
    access_token: AccessToken = Security(env_aware_validate_roles, scopes=["user.access"])
):
    # 业务逻辑代码
    pass

方案二:动态返回验证依赖

通过同步函数根据环境返回对应的验证函数,让Security接收正确的可调用对象:

def get_validation_dependency():
    if settings.ENVIRONMENT.lower() != 'prod':
        # 本地环境定义mock验证函数
        async def mock_validate_roles(security_roles: SecurityScopes):
            return AccessToken(
                roles=["user.access"], 
                iss="https://login.microsoftonline.com/<tenant_id>/v2.0",
                aud="<app id>"
            )
        return mock_validate_roles
    else:
        # 生产环境返回原验证函数
        return validate_roles

在端点中使用:

@api_router.post(path="/request")
def post_request(
    request_body: RequestBody,
    access_token: AccessToken = Security(get_validation_dependency(), scopes=["user.access"])
):
    # 业务逻辑代码
    pass

说明

两种方案均无需修改原validate_roles函数,本地环境直接返回模拟令牌跳过验证,生产环境正常执行原有权限校验逻辑,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:08:32