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

Azure静态Web应用关联Function App调用Graph API的身份验证配置

配置步骤:让BYOF Function App代表静态Web应用用户调用Microsoft Graph API

要实现你的需求,核心是通过On-Behalf-Of(OBO)流程让Function App以用户身份调用Graph API,以下是具体配置步骤:

1. 为Function App启用Entra ID身份验证

  • 进入Function App的「身份验证」面板,添加Entra ID身份提供商,可选择创建新应用注册或使用现有注册。
  • 配置完成后,将「未经过身份验证的请求」设置为HTTP 401 未经授权,确保只有已认证请求能访问Function App。

2. 为Function App的应用注册配置Graph API权限

  • 找到Function App对应的Entra ID应用注册,进入「API权限」页面,添加Microsoft Graph的User.ReadBasic.All委派权限。
  • 点击「授予管理员同意」,完成权限的生效(委派权限必须经过管理员同意才能用于OBO流程)。

3. 配置静态Web应用的应用注册,添加对Function App的访问权限

  • 进入静态Web应用对应的Entra ID应用注册,在「API权限」中点击「添加权限」→ 选择「我的API」,找到Function App的应用注册。
  • 添加默认的user_impersonation委派权限,并同样授予管理员同意,确保静态Web应用能合法获取访问Function App的令牌。

4. 在静态Web应用前端传递用户的访问令牌到Function App

  • 静态Web应用的前端需使用MSAL库(或静态Web应用内置的身份验证工具),请求针对Function App应用注册客户端ID的访问令牌,而非仅传递ID令牌。
  • 将获取到的访问令牌放在请求的Authorization头中(格式:Bearer <token>),随请求一起发送到Function App后端。

5. 在Function App中实现OBO流程获取Graph API令牌

  • 在Function App代码中,从请求头的Authorization字段提取用户的访问令牌。
  • 使用对应语言的MSAL库(如MSAL.NET、MSAL.js)发起OBO请求,换取针对Microsoft Graph的访问令牌。以C#为例的核心代码片段:
    using Microsoft.Identity.Web;
    
    // 注入ITokenAcquisition服务
    private readonly ITokenAcquisition _tokenAcquisition;
    
    public MyFunction(ITokenAcquisition tokenAcquisition)
    {
        _tokenAcquisition = tokenAcquisition;
    }
    
    [FunctionName("GetUserInfo")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req)
    {
        // 获取用户的访问令牌
        var graphAccessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(
            new[] { "https://graph.microsoft.com/User.ReadBasic.All" });
    
        // 使用令牌调用Graph API获取用户信息
        var graphClient = new HttpClient();
        graphClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphAccessToken);
        var userResponse = await graphClient.GetAsync("https://graph.microsoft.com/v1.0/me?$select=displayName,givenName,surname,mail,photo");
        var userData = await userResponse.Content.ReadAsStringAsync();
    
        return new OkObjectResult(userData);
    }
    
  • 如果不使用MSAL库,也可以手动构造OBO的令牌请求,向Entra ID的令牌端点提交参数(包括用户令牌、Function App的客户端ID/密钥、Graph API的权限范围等)。

6. 验证权限配置

  • 确认静态Web应用和Function App的应用注册中,所有涉及的委派权限都已完成管理员同意,否则OBO流程会因权限不足失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:17:11