您可以使用内置应用获取访问令牌来调用 Azure REST API。
你需要什么:
- Azure 管理员帐户
- 订阅 ID
- 租户 ID 或名称
1。获取 AD Graph REST API 的令牌
POST https://login.microsoftonline.com/{your_tenant_id_or_name}/oauth2/token
Headers
Content-Type:application/x-www-form-urlencoded
Body
grant_type=password
&resource=https%3A%2F%2Fgraph.windows.net%2F
&client_id=1950a258-227b-4e31-a9cf-717495945fc2
&username={your_user_name}
&password={your_password}
然后你会得到一个访问令牌作为响应:
使用$filter表达式获取目标用户信息,例如:
GET https://graph.windows.net/{tenant_id}/users?$filter=userPrincipalName%20eq%20'jack%40hanxia.onmicrosoft.com'&api-version=1.6
Headers
Authorization: Bearer {access_token_you_get_in_step_1}
然后你会得到用户的对象ID作为响应:
3。获取 Azure 管理 API 的令牌
POST https://login.microsoftonline.com/{your_tenant_id_or_name}/oauth2/token
Headers
Content-Type:application/x-www-form-urlencoded
Body
resource=https%3A%2F%2Fmanagement.core.windows.net%2F
&client_id=1950a258-227b-4e31-a9cf-717495945fc2
&grant_type=password
&username={your_user_name}
&password={your_password}
&scope=openid
然后你会得到一个访问令牌作为响应。
4。获取角色 ID
这里,我将尝试使用$filter表达式获取Owner的角色ID:
GET https://management.azure.com/subscriptions/{your_subscription_id}/providers/Microsoft.Authorization/roleDefinitions?$filter=roleName%20eq%20'Owner'&api-version=2018-01-01-preview
Headers
Authorization: Bearer {access_token_you_get_in_step_3}
然后你会得到角色ID作为响应:
5。添加角色分配
PUT https://management.azure.com/subscriptions/{your_subscription_id}/providers/Microsoft.Authorization/roleAssignments/{a_new_guid}?api-version=2018-09-01-preview
Headers
Authorization: Bearer {access_token_you_get_in_step_3}
Content-Type: application/json
Body
{
"properties": {
"roleDefinitionId": "/subscriptions/e5b0fcfa-e859-43f3-8d84-5e5fe29f4c68/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
"principalId": "ab6d4cd6-fc2d-40c7-a676-f8773aebfb5f"
}
}
roleDefinitionId 是我在步骤 4 中获得的角色 ID,principalId 是我在步骤 2 中获得的用户对象 ID。
使用 Azure PowerShell 或 Azure CLI 进行角色分配会更容易:
Connect-AzAccount -Subscription "your_subscription_id"
# to whole subscription
New-AzRoleAssignment -SignInName "user@****.onmicrosoft.com" -RoleDefinitionName "Owner"
# to a specific resource group
New-AzRoleAssignment -SignInName "user@****.onmicrosoft.com" -RoleDefinitionName "Owner" -ResourceGroupName "resource_group_name"