使用托管身份访问Azure OpenAI Service遇401错误求助
排查Azure OpenAI托管身份认证401错误的关键点
以下是你可能遗漏的核心环节:
获取正确的身份令牌
Azure OpenAI要求令牌的目标资源必须是https://cognitiveservices.azure.com/,而非ARM管理端点(https://management.azure.com/)。在VM上获取令牌时,要确保指定正确的资源:- 系统分配身份:执行命令
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fcognitiveservices.azure.com/' -H Metadata:true - 用户分配身份:需要额外指定client_id,命令为
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fcognitiveservices.azure.com/&client_id=<your-user-assigned-mi-client-id>' -H Metadata:true
将返回的access_token作为Bearer令牌放入请求头。
- 系统分配身份:执行命令
验证RBAC角色分配有效性
- 确认角色是直接分配到目标OpenAI资源上,而非仅分配到资源组或订阅级别(继承虽生效,但直接分配更稳妥)。
- RBAC角色分配通常需要5-15分钟生效,若刚完成分配就测试,需等待一段时间重试。
- 检查角色是否正确:必须是
Cognitive Services User,而非其他类似角色(比如Cognitive Services Contributor权限更高,但托管身份认证要求的是前者)。
检查Postman请求配置
- 确保请求URL是Azure OpenAI专属端点,格式为
https://<your-openai-resource-name>.openai.azure.com/openai/deployments/<your-model-deployment-name>/chat/completions?api-version=<api-version>,不能使用OpenAI公共端点。 - 请求头除
Authorization: Bearer <your-access-token>外,需包含Content-Type: application/json,且请求体格式符合对应API要求(比如聊天补全需包含messages数组)。
- 确保请求URL是Azure OpenAI专属端点,格式为
适配托管身份类型
如果使用用户分配的托管身份,获取令牌时必须指定该身份的client_id,否则VM可能默认使用系统分配身份(若同时存在),导致权限不匹配。排除网络限制
虽其他服务可正常访问,仍需确认VM能访问Azure AD令牌端点(http://169.254.169.254为本地元数据服务,通常无问题),以及OpenAI资源的网络设置是否允许VM所在虚拟网络访问(比如资源是否开启防火墙、是否将VM的VNet加入允许列表)。
内容的提问来源于stack exchange,提问作者ml123
相关产品推荐
相关产品推荐

