Heim  >  Artikel  >  Backend-Entwicklung  >  So erhalten Sie die Azure Active Directory-Token-Funktionalität über PHP

So erhalten Sie die Azure Active Directory-Token-Funktionalität über PHP

一个新手
一个新手Original
2017-10-05 15:30:441297Durchsuche

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 zur späteren Verwendung.

Wählen Sie die aktuelle Abonnement-ID aus

Legen Sie das aktuelle Abonnement fest. Dieser Schritt muss in einer Umgebung mit mehreren Abonnements durchgeführt werden:

Set-AzureRmContext -SubscriptionId <subscription ID>

AD-Anwendung erstellen

Neue Erstellung anzeigen Das Anwendungsobjekt, Attribut ApplicationId, wird später zum Erstellen von Dienstanmeldeinformationen, Rolleneinstellungen und Zugriffstoken verwendet.

$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

Nachdem das Dienstzertifikat erstellt wurde, verfügt es zunächst über keine Berechtigungen. Wir müssen den Berechtigungsbereich dafür festlegen.

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. Mitwirkender 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 Befolgen Sie die folgenden drei Informationen, um das Authentifizierungstoken abzurufen.

  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:

Token vor dem Hinzufügen von Bearer fest .

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 vonSo erhalten Sie die Azure Active Directory-Token-Funktionalität über PHP. 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