如何通过PowerShell向Azure机器学习Web服务传递API密钥以解决授权错误?
解决Invoke-WebRequest访问Azure机器学习Web服务的未授权问题
这种"Request is unauthorized to access resource."的错误在调用Azure ML Web服务时太常见了,核心原因就是你的请求没有带上服务要求的API密钥验证信息。Azure ML Web服务默认会拒绝未携带有效授权凭证的请求,下面给你两种靠谱的解决方法,以及一些需要注意的细节:
方法一:通过Authorization头传递API密钥(经典Web服务适用)
大多数Azure ML经典Web服务要求在请求头里添加Authorization: ApiKey <你的密钥>,你可以在PowerShell里这样写:
# 先定义好你的变量 $Url = "你的Azure ML Web服务端点URL" $body = '{"input_data": {"columns": ["col1", "col2"], "data": [[1, 2]]}}' # 替换成符合服务要求的JSON请求体 $apiKey = "从Azure ML工作室复制的Web服务API密钥" # 发起授权请求 Invoke-WebRequest -Uri $Url -Method POST -Body $body -Headers @{"Authorization" = "ApiKey $apiKey"} -ContentType "application/json"
方法二:通过api-key头传递密钥(部分托管端点适用)
如果是Azure ML托管在线端点,有些场景下可以直接用api-key头传递密钥,命令如下:
$Url = "你的托管端点URL" $body = '{"input_data": {"columns": ["col1", "col2"], "data": [[1, 2]]}}' $apiKey = "你的托管端点API密钥" Invoke-WebRequest -Uri $Url -Method POST -Body $body -Headers @{"api-key" = $apiKey} -ContentType "application/json"
额外注意事项
- 别漏了ContentType参数:绝大多数情况下,Web服务要求请求体是JSON格式,一定要加上
-ContentType "application/json",不然服务可能无法正确解析请求,甚至间接导致授权验证失败。 - 检查密钥正确性:确保你复制的API密钥没有多余的空格,最好直接从Azure ML工作室的Web服务详情页面复制粘贴。
- 托管端点的特殊情况:如果是Azure ML托管在线端点,部分场景可能要求使用Azure AD令牌(Bearer Token)而不是API密钥,这种情况下你需要先获取令牌再发起请求:
# 先安装Az模块(如果没装的话:Install-Module -Name Az -AllowClobber -Scope CurrentUser) $token = (Get-AzAccessToken -ResourceUrl "https://ml.azure.com").Token Invoke-WebRequest -Uri $Url -Method POST -Body $body -Headers @{"Authorization" = "Bearer $token"} -ContentType "application/json"
内容的提问来源于stack exchange,提问作者Reza Amya
相关产品推荐
相关产品推荐

