Heim  >  Artikel  >  Backend-Entwicklung  >  Detailliertes Beispiel dafür, wie PHP das Azure Active Directory-Token erhält

Detailliertes Beispiel dafür, wie PHP das Azure Active Directory-Token erhält

黄舟
黄舟Original
2017-09-08 09:10:002275Durchsuche

Wenn es sich beim Aufruf der Azure Rest API um eine API handelt, die zu Azure Resource Manager gehört, müssen Sie die Azure Active Directory (Azure AD)-Authentifizierung verwenden, um ein Token (Token) zu erhalten, bevor Sie darauf zugreifen können.

Hier sind die Schritte zum Erstellen einer Azure AD-Anwendung und zum Autorisieren dieser für den Zugriff auf Ressourcen, die Azure verwalten:

Für ein besseres Leseerlebnis können Sie auch hier klicken.

Hinweis

Die folgenden Authentifizierungsmethoden gelten nur für die Azure Resource Manager-API. Das heißt, APIs mit einem Endpunkt von management.chinacloudapi.cn gelten nicht für Azure Service Manager-APIs (APIs mit einem Endpunkt von management.core.chinacloudapi.cn).

Melden Sie sich bei Ihrem Azure-Konto (PowerShell) an

Notieren Sie die erhaltene TenantID für die spätere Verwendung.

Wählen Sie die aktuelle Abonnement-ID aus

, um das aktuelle Abonnement festzulegen. Dieser Schritt muss in einer Umgebung mit mehreren Abonnements durchgeführt werden:


Set-AzureRmContext -SubscriptionId <subscription ID>

AD-Anwendung erstellen

Zeigen Sie das neu erstellte Anwendungsobjekt und das Attribut ApplicationId an, das zum Erstellen von Dienstanmeldeinformationen, Rolleneinstellungen und Zugriffstoken verwendet wird später.


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

Dienstanmeldeinformationen erstellen

Azure AD-App Dienstanmeldeinformationen erstellen:


New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId

Wenn die Dienstanmeldeinformationen erstellt werden, verfügen sie zunächst über keine Berechtigungen und wir müssen den Berechtigungsbereich festlegen Es.

Autorisierung

Fügen Sie Rolleneinstellungen für Ihre Dienstanmeldeinformationen hinzu. Legen Sie in diesem Beispiel Leseberechtigungen für Ihre Dienstanmeldeinformationen fest, um auf alle Ressourcen unter Ihrem Abonnement zuzugreifen. Wenn Sie mehr erfahren möchten, lesen Sie bitte: Azure Role-based Access Control.


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

Davon hat RoleDefinitionName drei Berechtigungseinstellungen:

  1. Leser hat Leseberechtigungen für Azure-Ressourcen.

  2. Der Mitwirkende verfügt über Administratorrechte für Azure-Ressourcen, kann jedoch keine anderen autorisieren.

  3. Der Besitzer verfügt über Verwaltungsrechte für Azure-Ressourcen und kann auch andere zur Verwaltung dieser Ressourcen autorisieren.

 

Rufen Sie die Oauth2-API auf, um das Token zu erhalten

Auf diese Weise wird die Azure AD-Anwendung erstellt erstellt und wir können es verwenden. Die folgenden drei Informationen werden verwendet, um das Authentifizierungstoken zu erhalten.

  1. telent-id entspricht der telentID, die in den Abonnementinformationen verwendet wird.

  2. application-id ApplicationID, die beim Erstellen der Anwendung zurückgegeben wird.

  3. App-Passwort Das Passwort, das beim Erstellen der Anwendung eingegeben wurde.

Um das Token zu erhalten, verwenden Sie die Authentifizierungsschnittstelle von Azure Login oauth2. Wenn Sie mehr wissen möchten, lesen Sie bitte dieses Dokument: Verwenden der Azure Resource Manager REST API.

Bitte beachten Sie den folgenden Code:


$tenlent_id = &#39;Your Sub Tenlent ID&#39;;
$client_id = &#39;Application ID&#39;;
$client_secret = &#39;Application Password&#39;;

$auth_url = &#39;https://login.chinacloudapi.cn/&#39;.$tenlent_id.&#39;/oauth2/token?api-version=1.0&#39;;
$auth = curl_init($auth_url);
$post_data= &#39;grant_type=client_credentials&resource=https://management.chinacloudapi.cn/&client_id=&#39;.$client_id.&#39;&client_secret=&#39;.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(
&#39;Content-Type: application/x-www-form-urlencoded&#39;
)
));
curl_exec($atuh);
echo "\n";

Nachdem Sie die Abfrage ausgeführt haben, erhalten Sie die Token-Daten und access_token ist das Zugriffstoken.


{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1455680701",
"not_before": "1455676801",
"resource": "https://management.azure.com/",
"access_token": "eyJ0eXAiOi…"
}

Fügen Sie dann die Einstellung „Autorisierungsheader“ zur API-Anfrage hinzu, auf die Sie zugreifen möchten, und legen Sie ihren Wert auf:

Vor Token muss Inhaber hinzugefügt werden.

Anrufbeispiel:


$token = &#39;eyJ0eXA…&#39;;
$host = &#39;management.chinacloudapi.cn&#39;;
$version = &#39;2015-09-01&#39;;
$url = &#39;https://&#39;.$host.&#39;/subscriptions/5bbf0cbb-647d-4bd8-b4e6-26629f109bd7/resourceGroups/Default-MySql-ChinaNorth/providers/Microsoft.MySql/servers/poddbtest/databases/kevintest?api-version=&#39;.$version;
$ch = curl_init($url);
$data = array(
&#39;properties&#39; => array(
&#39;charset&#39; => &#39;utf8&#39;,
&#39;collation&#39; => &#39;utf8_general_ci&#39;
),
);
$json = json_encode($data);

curl_setopt_array($ch, array(
CURLOPT_VERBOSE => 1,
CURLOPT_CUSTOMREQUEST => &#39;PUT&#39;,
CURLOPT_POSTFIELDS => $json,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTPHEADER => array(
&#39;Content-type:application/json&#39;,
&#39;Authorization:Bearer &#39;.$token
)
));

$ret =curl_exec($ch);
if (empty($ret)) {
    // some kind of an error happened
    echo &#39;Curl error: &#39; . curl_error($ch);
} else {
    $info = curl_getinfo($ch);
}
echo "\n";

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel dafür, wie PHP das Azure Active Directory-Token erhält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn