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

使用AD B2C认证的Azure Function如何支持守护程序应用访问?

解决方案

核心原因确认

你遇到的401错误确实是令牌签发方不匹配导致:Azure Function App的身份认证默认仅校验配置的B2C用户流对应的签发方,而你通过客户端凭证流获取的令牌由Azure AD原生端点签发,不在允许列表内,因此被拦截。

具体配置步骤

1. 新增允许的令牌签发方

进入Azure Function App的管理界面:

  • 依次打开「Authentication」=> 你已配置的Azure AD身份提供程序 => 点击「编辑」
  • 切换到「高级」设置页,找到「允许的令牌发行者」配置项
  • 在现有B2C签发方的基础上,新增客户端凭证令牌的签发方:
    https://login.microsoftonline.com/<B2C-Tenant-Id>/v2.0
  • 保存配置等待生效。

2. 配置应用访问权限

你需要为守护程序应用配置API访问权限,避免任意同租户应用都能调用你的Function:

  • 打开保护Function App的AD B2C应用注册界面,进入「应用角色」页
  • 新增自定义应用角色,例如名称为Daemon.Access,成员类型选择「应用」,值和描述按业务需求填写,保存
  • 进入你用来请求客户端凭证令牌的应用注册(如果是同一个应用注册可跳过),打开「API权限」页
  • 点击「添加权限」=> 选择「我的API」=> 找到保护Function的应用注册 => 切换到「应用权限」=> 勾选你刚才创建的Daemon.Access权限
  • 点击「授予管理员同意」完成权限授权。

3. (可选)添加权限校验逻辑

如果需要限制只有持有对应应用权限的令牌才能访问,可以添加额外校验:

  • 方式1:在Function App的身份认证「高级」设置中,添加allowedAppRoles配置,值为你定义的应用角色值
  • 方式2:在Function代码中解析JWT令牌,检查roles声明是否包含对应的权限值,无权限时返回403。

验证方式

重新请求客户端凭证令牌后,可先解码JWT确认以下信息:

  • aud声明值为Function应用注册的Client ID
  • iss声明值为你新增的允许签发方
  • roles声明包含你定义的应用权限
    确认无误后再调用Function App即可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:00:05