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

如何在Azure B2C与FastAPI集成中配置多Scope?

解决FastAPI + fastapi-azure-auth多Scope显示问题

问题根源

多次实例化AzureSettings会覆盖FastAPI全局的OpenAPI安全配置——每次创建新实例时,都会重新注册一套认证方案,最终只有最后一次的配置会生效,导致全局认证选项只显示最后一个Scope,且路由端无法正确关联指定的Scope。

正确实现方案

1. 全局仅初始化一套认证配置

创建一个包含所有需要的Scope的AzureSettings实例,对应的SingleTenantAzureAuthorizationCodeBearer也只实例化一次:

from fastapi import FastAPI, Security
from fastapi_azure_auth import SingleTenantAzureAuthorizationCodeBearer, AzureSettings

# 初始化全局配置,包含所有需要的Scope(注意格式要和Azure B2C中定义的一致)
settings = AzureSettings(
    tenant_id="你的租户ID",
    client_id="你的应用ID",
    scopes={
        "https://你的租户.onmicrosoft.com/api/premium": "高级权限",
        "https://你的租户.onmicrosoft.com/api/admin": "管理员权限",
        "https://你的租户.onmicrosoft.com/api/basica": "基础权限"
    }
)

# 全局唯一的认证依赖实例
oauth2_scheme = SingleTenantAzureAuthorizationCodeBearer(settings=settings)

app = FastAPI()

2. 路由中单独指定所需Scope

在每个需要权限控制的路由上,通过Security()函数的scopes参数指定该路由要求的Scope:

# 仅允许拥有premium Scope的用户访问
@app.get("/premium")
async def premium_resource(
    token: str = Security(oauth2_scheme, scopes={"https://你的租户.onmicrosoft.com/api/premium": "高级权限"})
):
    return {"content": "仅高级用户可见"}

# 仅允许拥有admin Scope的用户访问
@app.get("/admin")
async def admin_resource(
    token: str = Security(oauth2_scheme, scopes={"https://你的租户.onmicrosoft.com/api/admin": "管理员权限"})
):
    return {"content": "仅管理员可见"}

# 仅允许拥有basica Scope的用户访问
@app.get("/basic")
async def basic_resource(
    token: str = Security(oauth2_scheme, scopes={"https://你的租户.onmicrosoft.com/api/basica": "基础权限"})
):
    return {"content": "基础用户可见"}

3. 关键注意事项

  • Scope格式必须匹配Azure B2C配置:不能只写premium这类短名称,必须使用Azure B2C中定义的完整Scope URI(比如https://{tenant}.onmicrosoft.com/{api-id}/{scope-name}),否则不仅FastAPI docs无法正确显示,Azure B2C也无法完成权限校验。
  • 避免重复实例化认证对象:全局只保留一套AzureSettings和SingleTenantAzureAuthorizationCodeBearer实例,所有路由复用同一个认证依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:13