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
相关产品推荐
相关产品推荐

