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

Azure静态Web应用ADB2C+Python API自定义角色函数未调用求助

解决Azure静态Web应用自定义OIDC(AADB2C)下Python API角色源未触发的问题

核心结论

自定义角色源功能完全支持Python无服务器API和AADB2C,你的问题出在配置或函数实现的细节上,以下是具体排查和修复步骤:

1. 修正Python API函数的响应格式与路由

你的代码仅定义了角色字典,但未返回符合要求的HTTP响应:

  • 确保函数为HTTP触发,路由严格匹配/api/get_roles(检查function.json中的route配置,避免大小写或拼写错误)
  • 必须返回application/json格式的响应,示例代码如下:
import json
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    default_roles = {
        "roles": [
            "anonymous",
            "tester"
        ]
    }
    return func.HttpResponse(
        json.dumps(default_roles),
        mimetype="application/json",
        status_code=200
    )
  • 确认函数的授权级别为anonymous(function.json中authLevel设为"anonymous"),避免静态Web应用的auth层调用时被拦截

2. 补充OIDC登录配置的必要Scope

当前你的AADB2C登录配置中scopes为空,静态Web应用无法获取用户身份凭证传递给角色源函数,必须添加openid scope:

"login": {
    "nameClaimType": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
    "scopes": ["openid"],
    "loginParameterNames": []
}

3. 验证角色源路径的正确性

检查staticwebapp.config.json中的rolesSource路径:

  • 确保路径为/api/get_roles,与函数部署后的路由完全一致(Azure静态Web应用的API路由区分大小写)

4. 查看日志定位问题

  • 登录Azure门户,进入静态Web应用资源,打开日志流(Log Stream),查看调用/api/get_roles时的错误日志
  • 查看Python API函数的执行日志,确认函数是否被触发、是否存在执行异常

5. 确认用户身份传递

静态Web应用会通过x-ms-client-principal请求头将用户客户端主体信息传递给角色源函数,可在函数中打印该头信息确认身份是否正确传递,以便后续实现动态角色分配:

client_principal = req.headers.get('x-ms-client-principal')
print(f"Client Principal: {client_principal}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:05:19