Postman调用启用Azure AD的Function App返回401认证失败如何解决
问题根因
你当前获取的令牌受众不匹配,这是返回401的核心原因。
你请求token时填的resource参数是https://management.azure.com/,拿到的是Azure资源管理平面专用令牌,仅能用于操作Azure资源管控接口(比如修改Function配置、重启服务这类管理操作),无法通过Function App内置AAD认证的校验逻辑——Function App的AAD认证会强制校验令牌的aud(受众)声明,只有令牌受众匹配Function App配置的允许值时才会放行。
另外补充:获取AAD令牌的接口规范要求使用POST方法,你当前用GET请求虽然临时拿到了令牌,但不符合接口规范,部分租户策略下会直接拦截该类请求。
正确认证配置步骤
1. 确认Function App的允许令牌受众
进入你的Function App「身份验证」页面,找到已配置的Azure AD身份提供程序,记录两个关键信息:
- 该身份提供程序关联的AAD应用客户端ID
- 「允许的令牌受众」列表,默认包含以下两个有效值:
https://AzureIdentity.azurewebsites.net(替换为你的Function App实际默认域名)api://<前述AAD应用客户端ID>
后续获取token时,资源参数必须从上述列表里选,不能用其他值。
2. 修正令牌获取请求
推荐使用v2.0版本的AAD令牌端点,请求配置如下:
POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token 请求头: Content-Type: application/x-www-form-urlencoded 请求体(表单格式): grant_type=client_credentials &client_id=04e17699-64cd-42ec-96ec-23be345ef6ed &client_secret={你生成的客户端密钥} &scope=https://AzureIdentity.azurewebsites.net/.default
如果你坚持用v1.0端点,就把请求体里的scope参数换成resource,值填你之前记录的允许受众值即可,比如https://AzureIdentity.azurewebsites.net。
3. 携带令牌调用Function接口
调用Function App的业务接口时,在请求头中添加以下字段即可:
Authorization: Bearer <上一步请求拿到的access_token值>
常见排查点
- 如果修正参数后还是返回401,把拿到的access_token解码(直接用JWT解码工具即可,不需要验签),检查
aud字段的值是否和你在Function AAD配置里的允许受众完全一致,多一个末尾斜杠、字符错漏都会导致校验失败。 - 如果你在AAD应用里开启了角色/权限分配校验,需要提前给调用方对应的服务主体授予Function关联AAD应用的应用权限,否则客户端凭据流的请求会被权限校验拦截。
- 严格区分管理平面令牌和数据平面令牌:管控Azure资源用ARM受众的令牌,调用Function业务接口必须用Function自身受众的令牌,二者不能混用。
内容的提问来源于stack exchange,提问作者JackFrost
相关产品推荐
相关产品推荐

