如何通過 PHP 擷取 Azure Active Directory 令牌功能

來源:互聯網
上載者:User
在調用 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 以供後續程式使用。

選擇當前訂閱 ID

設定當前訂閱,多訂閱環境下需要執行該步驟 :

Set-AzureRmContext -SubscriptionId <subscription ID>

建立 AD 應用

查看新建立的應用對象,屬性 ApplicationId,在後續會用來建立服務憑證,角色設定和 Access Token。

$azureAdApplication = New-AzureRmADApplication -DisplayName "exampleapp" -HomePage "https://www.contoso.org" -IdentifierUris "https://www.contoso.org/example" -Password "<Your_Password>"

建立服務憑證

Azure AD 應用建立服務憑證:

New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId

當建立完成服務憑證後,初始是沒有任何許可權的,我們需要為其設定許可權範圍。

授權

為您的服務憑證添加角色設定,在該例中,為您的服務憑證設定訪問您訂閱下所有資源的讀許可權。 如果想瞭解更多內容,請參考:Azure Role-based Access Control。

New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $azureAdApplication.ApplicationId

其中 RoleDefinitionName 有三種使用權限設定:

  1. Reader 對Azure資源有讀取許可權。

  2. Contributor 對Azure資源有系統管理權限,但無法授權他人。

  3. Owner 對Azure資源擁有系統管理權限,也可以授權他人管理。

  

調用 Oauth2 API 擷取 Token

這樣 Azure AD Application 就建立完成了,我們可以使用以下三個資訊,來擷取認證的 Token。

  1. telent-id 對應訂閱資訊上使用的 telentID。

  2. application-id 建立應用返回的 ApplicationID。

  3. 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";
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.