在呼叫 Azure Rest API 時,如果是屬於 Azure Resource Manager 的 API,則需要使用 Azure Active Directory (Azure AD)認證取得令牌(Token),然後才能夠進行存取。
以下是建立 Azure AD 應用,並授權其可以存取管理 Azure 的資源的步驟:
取得更好的閱讀體驗也可以點擊此處。
Note
以下認證方式,只適用於 Azure Resource Manager 的 API。 即 endpoint 為 management.chinacloudapi.cn
的 API,不適用於 Azure Service Manager 的 API(endpoint 為 management.core.chinacloudapi.cn
的 API)。
登入Azure 帳號(PowerShell)
# #記錄取得到的TenantID 以供後續程式使用。
Set-AzureRmContext -SubscriptionId <subscription ID>建立AD 應用程式
$azureAdApplication = New-AzureRmADApplication -DisplayName "exampleapp" -HomePage "https://www.contoso.org" -IdentifierUris "https://www.contoso.org/example" -Password "<Your_Password>"
建立服務憑證
New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId
授權
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $azureAdApplication.ApplicationId
其中
RoleDefinitionNameOwner 對Azure資源擁有管理權限,也可以授權他人管理。
呼叫Oauth2 API 取得Token
這樣Azure AD Application 就創建完成了,我們可以使用以下三個信息,來獲取認證的Token。
###telent-id 對應訂閱資訊上使用的 telentID。 ############application-id 建立應用程式傳回的 ApplicationID。 ############app password 建立應用程式時填入的密碼。 ############取得 Token 的方式,使用 Azure login oauth2 的認證接口,如果想了解更多,請參考此文件:Using the Azure Resource Manager REST API。 ######請參考以下程式碼:###$tenlent_id = 'Your Sub Tenlent ID'; $client_id = 'Application ID'; $client_secret = 'Application Password'; $auth_url = 'https://login.chinacloudapi.cn/'.$tenlent_id.'/oauth2/token?api-version=1.0'; $auth = curl_init($auth_url); $post_data= 'grant_type=client_credentials&resource=https://management.chinacloudapi.cn/&client_id='.$client_id.'&client_secret='.urlencode($client_secret); curl_setopt_array($auth, array( CURLOPT_VERBOSE => 1, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $post_data, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_HTTPHEADER => array( 'Content-Type: application/x-www-form-urlencoded' ) )); curl_exec($atuh); echo "\n";###執行查詢後會得到 Token 數據, access_token 即為存取 Token。 ###
{ "token_type": "Bearer", "expires_in": "3600", "expires_on": "1455680701", "not_before": "1455676801", "resource": "https://management.azure.com/", "access_token": "eyJ0eXAiOi…" }###然後將您要存取的API 請求頭上加上Authorization 的Header 設置,並將其值設為:###############Token 之前要加上Bearer。 ######呼叫範例:###
$token = 'eyJ0eXA…'; $host = 'management.chinacloudapi.cn'; $version = '2015-09-01'; $url = 'https://'.$host.'/subscriptions/5bbf0cbb-647d-4bd8-b4e6-26629f109bd7/resourceGroups/Default-MySql-ChinaNorth/providers/Microsoft.MySql/servers/poddbtest/databases/kevintest?api-version='.$version; $ch = curl_init($url); $data = array( 'properties' => array( 'charset' => 'utf8', 'collation' => 'utf8_general_ci' ), ); $json = json_encode($data); curl_setopt_array($ch, array( CURLOPT_VERBOSE => 1, CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_POSTFIELDS => $json, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_HTTPHEADER => array( 'Content-type:application/json', 'Authorization:Bearer '.$token ) )); $ret =curl_exec($ch); if (empty($ret)) { // some kind of an error happened echo 'Curl error: ' . curl_error($ch); } else { $info = curl_getinfo($ch); } echo "\n";
以上是如何透過 PHP 取得 Azure Active Directory 令牌功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!