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

Azure静态Web应用关联Function后端缺失Azure AD应用角色声明

解决Azure Static Web App关联Function App时自定义应用角色缺失问题

问题根源

Static Web App默认转发给关联后端Function的身份令牌经过裁剪,仅保留基础用户声明,不会自动包含自定义应用角色信息,这就是为什么/.auth/me能看到完整角色,但Function接口返回的声明里没有。

解决步骤

1. 配置Static Web App传递完整令牌

在Static Web App的应用设置中添加以下配置:

  • 名称:AZURE_FUNCTIONS_AUTH_ENABLE_IDENTITY_BEARER
  • 值:true

修改后重启Static Web App,该配置会让SWA调用后端Function时,传递未经裁剪的完整AAD身份令牌,确保自定义角色声明被包含在内。

2. 在C# Function中正确读取角色声明

确保Function代码从请求上下文的用户声明中正确提取角色。自定义应用角色的声明类型通常是ClaimTypes.Role(对应http://schemas.microsoft.com/ws/2008/06/identity/claims/role)或roles,示例代码如下:

using System.Security.Claims;
using Microsoft.AspNetCore.Mvc;

public static class GetRoles
{
    [FunctionName("GetRoles")]
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
        ILogger log)
    {
        var roles = req.HttpContext.User.Claims
            .Where(c => c.Type == ClaimTypes.Role || c.Type == "roles")
            .Select(c => c.Value)
            .ToList();
        
        return new OkObjectResult(new { Roles = roles });
    }
}

3. 验证AAD角色分配正确性

确认:

  • 自定义应用角色(如OurApp.Read)已在共用的AAD应用注册的"应用角色"中定义
  • 当前认证用户或其所属的安全组,已被分配了这些自定义角色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:31:23