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

如何在Azure Static Web App的Azure Function中安全获取用户Claims?

Azure Static Web Apps 服务器端安全获取用户Claims的方法

现状说明

在Azure Static Web Apps里:

  • 客户端调用.auth/me接口能拿到包含clientPrincipal和自定义claims的完整用户信息,示例如下:
{
    "clientPrincipal": {
        "userId": "<user_id>",
        "userRoles": [
            "anonymous",
            "authenticated"
        ],
        "claims": [
            {
                "typ": "name",
                "val": "John Doe"
            },
            {
                "typ": "email",
                "val": "john.doe@someserver.org"
            }
        ],
        "identityProvider": "custom",
        "userDetails": "John Doe"
    }
}
  • 但服务器端只能通过x-ms-client-principal请求头获取用户信息,这个头里没有claims字段,示例如下:
{
    "userId": "<user_id>",
    "userRoles": [ "anonymous", "authenticated" ],        
    "identityProvider": "custom",
    "userDetails": "John Doe"
}

这是官方设计,API层面确实无法通过该头拿到claims数组。

另外,直接读取客户端的StaticWebAppsAuthCookie存在安全风险——cookie可能被篡改,导致权限验证失效。

安全解决方案

以下是三种可靠的服务器端获取用户claims的方式:

1. 配置角色映射(推荐)

在staticwebapp.config.json里将目标claims映射为自定义角色,之后服务器端就能通过x-ms-client-principal的userRoles字段获取这些角色,间接实现基于claims的权限控制。这种方式由Azure认证层处理,完全安全。

示例配置:

{
  "auth": {
    "roles": {
      "editor": {
        "allowedRoles": ["authenticated"],
        "claimType": "permission",
        "claimValue": "edit_content"
      }
    }
  }
}

2. 调用认证提供者的官方API

如果需要原始claims,可在服务器端使用认证提供者(如Azure AD、GitHub等)的用户信息API,通过Azure Static Web Apps认证层传递的可信令牌发起请求,获取完整的用户claims。

注意:必须使用平台传递的可信令牌,不能直接用客户端发送的令牌,避免篡改风险。

3. 使用Azure Functions认证绑定

若你的API是Azure Functions托管的,可使用StaticWebAppsAuthentication绑定,它会自动解析并验证用户的完整身份信息(包括claims),无需手动处理请求头或cookie。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:13:17