Azure Rest API를 호출할 때 Azure Resource Manager에 속한 API인 경우 Azure AD(Azure Active Directory) 인증을 사용하여 토큰(Token)을 얻어야 액세스할 수 있습니다.
다음은 Azure AD 애플리케이션을 생성하고 Azure를 관리하는 리소스에 액세스하도록 권한을 부여하는 단계입니다.
더 나은 읽기 환경을 위해 여기를 클릭할 수도 있습니다.
참고
다음 인증 방법은 Azure Resource Manager API에만 적용됩니다. 즉, 엔드포인트가 management.chinacloudapi.cn
인 API는 Azure Service Manager의 API(엔드포인트가 management.core.chinacloudapi.cn
인 API)에 적용할 수 없습니다. ). management.chinacloudapi.cn
的 API,不适用于 Azure Service Manager 的 API(endpoint 为 management.core.chinacloudapi.cn
的 API)。
登录 Azure 账户(PowerShell)
记录获取到的 TenantID 以供后续程序使用。
设置当前订阅,多订阅环境下需要执行该步骤 :
Set-AzureRmContext -SubscriptionId <subscription ID>
查看新创建的应用对象,属性 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
$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";AD 애플리케이션 생성새로 생성된 애플리케이션 객체 보기 나중에 서비스 자격 증명, 역할 설정 및 액세스 토큰을 생성하는 데 사용되는 ApplicationId 속성입니다.
{ "token_type": "Bearer", "expires_in": "3600", "expires_on": "1455680701", "not_before": "1455676801", "resource": "https://management.azure.com/", "access_token": "eyJ0eXAiOi…" }
서비스 자격 증명 만들기
$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";
Authorization
서비스 자격 증명에 대한 역할 설정을 추가합니다. 이 예에서는 구독에 속한 모든 리소스에 액세스할 수 있도록 서비스 자격 증명에 대한 읽기 권한을 설정합니다. 자세한 내용은 Azure 역할 기반 액세스 제어를 참조하세요.
RoleDefinitionName
에 대한 세 가지 권한 설정이 있습니다.
소유자는 Azure 리소스에 대한 관리 권한을 가지며 다른 사람이 이를 관리하도록 권한을 부여할 수도 있습니다.
위 내용은 PHP가 Azure Active Directory 토큰을 얻는 방법에 대한 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!