python - Azure 分析休息 api:401 未经授权。“身份验证失败。”
问题描述
我正在尝试按照此 azure 文档进行数据分区刷新(发布):https ://docs.microsoft.com/en-us/azure/analysis-services/analysis-services-async-refresh
无论是邮寄还是获得我都得到 401 Unauthorized (即使服务关闭!)。
我从 azure AD (ServicePrincipalCredential) 获得了令牌。我将 AD 添加为 Analysis Services 管理员 ( https://docs.microsoft.com/en-us/azure/analysis-services/analysis-services-server-admins ) 我在 Analysis Services IAM 中将所有者角色赋予了 AD。
它与 Analysis Services 管理 rest api ( https://docs.microsoft.com/en-us/rest/api/analysisservices/operations/list ) 使用相同的身份验证 (得到代码响应 200)
我的python代码:
from azure.common.credentials import ServicePrincipalCredentials
import requests
credentials = ServicePrincipalCredentials(client_id="ad_client_id",
secret="ad_secret",
tenant="ad_tenant")
token = credentials.token
url = "https://westeurope.asazure.windows.net/servers/{my_server}/models/{my_model}/refreshes"
test_refresh = {
"Type": "Full",
"CommitMode": "transactional",
"MaxParallelism": 1,
"RetryCount": 1,
"Objects": [
{
"table": "my_table",
"partition": "my_partition"
}
]
}
header={'Content-Type':'application/json', 'Authorization': "Bearer {}".format(token['access_token'])}
r = requests.post(url=url, headers=header, data=test_refresh)
import json
print(json.dumps(r.json(), indent=" "))
我得到的回应:
{
"code": "Unauthorized",
"subCode": 0,
"message": "Authentication failed.",
"timeStamp": "2019-05-22T13:39:03.0322998Z",
"httpStatusCode": 401,
"details": [
{
"code": "RootActivityId",
"message": "aab22348-9ba7-42c9-a317-fbc231832f75"
}
]
}
我很绝望,你能帮我澄清一下吗?
解决方案
最后我解决了这个问题。我有错误的令牌。该 api 需要一个 OAuth2.0 身份验证令牌(Azure 分析服务其余 api 文档不太清楚如何获得一个)
对于那些会遇到相同问题的人,有办法获得一个。
from adal import AuthenticationContext
authority = "https://login.windows.net/{AD_tenant_ID}"
auth_context = AuthenticationContext(authority)
oauth_token = auth_context.acquire_token_with_client_credentials(resource="https://westeurope.asazure.windows.net", client_id=AD_client_id, client_secret=AD_client_id)
token = oauth_token['accessToken']
https://github.com/AzureAD/azure-activedirectory-library-for-python/wiki/ADAL-basics
推荐阅读
- python - PyQt5 调用 qwidget.setMaximumHeight 导致内容消失
- c# - 使用 C# 中的字典在同一类中使用某些自定义类属性作为另一个属性(形成为值)的唯一键
- r - Rcpp 编译器用返回值标记错误 - 无能为力
- c++ - 在类中使用 typedef 覆盖现有类型
- javascript - 如何将循环div的ID转换为javascript
- javascript - Web Audio Api:audioContext.createConstantSource() 未在 Safari 中实现;解决方法?
- python-3.x - 将 pandas 列值与列标题值相乘(如果标题值是数字/数字)
- python - 如何根据一组兄弟姐妹中的位置仅匹配给定类型的第一个元素
- php - 现在如何在 Lumen 中启用助手
- java - 使用for循环和对象方法为Java中的对象数组分配值时遇到问题