尝试创建一个简单的任务来列出Azure门户中的所有资源.我按照给定URL中的方向并成功接收了令牌.
http://azure-sdk-for-python.readthedocs.org/en/latest/resourcemanagement.html#authentication
但是,使用令牌和superscription_id的组合,我收到以下错误.
错误:
azure.common.AzureHttpError: {"error"{"code":"AuthenticationFailed","message":"The access token has been obtained from wrong audience or resource '00000002-0000-0000-c000-000000000000'. It should exactly match (including forward slash) with one of the allowed audiences 'https://management.core.windows.net/','https://management.azure.com/'."}}
我在Active目录中创建了一个应用程序,并为Windows Active Directory分配了所有权限
以下是获取令牌的代码:
def get_token_from_client_credentials(endpoint, client_id, client_secret): payload = { 'grant_type': 'client_credentials', 'client_id': client_id, 'client_secret': client_secret # 'resource': 'https://management.core.windows.net/', } response = requests.post(endpoint, data=payload).json() return response['access_token'] auth_token = get_token_from_client_credentials(endpoint='https://login.microsoftonline.com/11111111111-1111-11111-1111-111111111111/oauth2/token', client_id='22222222-2222-2222-2222-222222222222', client_secret='test/one/year/secret/key',
尝试在以下代码中使用此标记:
def get_list_resource_groups(access_token, subscription_id): cred = SubscriptionCloudCredentials(subscription_id, access_token) resource_client = ResourceManagementClient(cred) resource_group_list = resource_client.resource_groups.list(None) rglist = resource_group_list.resource_groups return rglist
小智.. 9
这不会影响(它是一个可选参数)
实际上,resource
在Service to Service Calls中使用该参数使用Client Credentials流来访问令牌,该参数告诉您的应用程序在何处获取令牌.当你需要验证的ARM请求,您需要设置'resource': 'https://management.core.windows.net/'
在get_token_from_client_credentials()
我们还可以从您的错误消息中获取信息:
已从错误的受众或资源"00000002-0000-0000-c000-000000000000"获取访问令牌.它应该完全一致(包括正斜杠)与允许观众"的一个https://management.core.windows.net/ "," https://management.azure.com/ "
如有任何疑虑,请随时告诉我.
这不会影响(它是一个可选参数)
实际上,resource
在Service to Service Calls中使用该参数使用Client Credentials流来访问令牌,该参数告诉您的应用程序在何处获取令牌.当你需要验证的ARM请求,您需要设置'resource': 'https://management.core.windows.net/'
在get_token_from_client_credentials()
我们还可以从您的错误消息中获取信息:
已从错误的受众或资源"00000002-0000-0000-c000-000000000000"获取访问令牌.它应该完全一致(包括正斜杠)与允许观众"的一个https://management.core.windows.net/ "," https://management.azure.com/ "
如有任何疑虑,请随时告诉我.
看起来你有这条线被注释掉了吗?
'resource': 'https://management.core.windows.net/',
这是您获得令牌的受众,因此您将需要此行.