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

