Maison >développement back-end >tutoriel php >Exemple détaillé de la façon dont php obtient le jeton Azure Active Directory

Exemple détaillé de la façon dont php obtient le jeton Azure Active Directory

黄舟
黄舟original
2017-09-08 09:10:002379parcourir

Lors de l'appel de l'API Azure Rest, s'il s'agit d'une API appartenant à Azure Resource Manager, vous devez utiliser l'authentification Azure Active Directory (Azure AD) pour obtenir un jeton (Token) avant de pouvoir y accéder.

Voici les étapes pour créer une application Azure AD et l'autoriser à accéder aux ressources qui gèrent Azure :

Pour une meilleure expérience de lecture, vous pouvez également cliquer ici.

Remarque

Les méthodes d'authentification suivantes s'appliquent uniquement à l'API Azure Resource Manager. Autrement dit, les API avec un point de terminaison de management.chinacloudapi.cn ne sont pas applicables aux API Azure Service Manager (API avec un point de terminaison de management.core.chinacloudapi.cn).

Connectez-vous à votre compte Azure (PowerShell)

Enregistrez le TenantID obtenu pour une utilisation ultérieure.

Sélectionnez l'ID d'abonnement actuel

pour définir l'abonnement en cours. Cette étape doit être effectuée dans un environnement multi-abonnement :


Set-AzureRmContext -SubscriptionId <subscription ID>

Créer une application AD

Afficher l'objet d'application nouvellement créé, l'attribut ApplicationId, qui sera utilisé pour créer les informations d'identification du service, les paramètres de rôle et le jeton d'accès ultérieurement .


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

Créer des informations d'identification de service

Application Azure AD Créer des informations d'identification de service :


New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId

Lorsque l'identifiant de service est créé, il ne dispose initialement d'aucune autorisation et nous devons définir la portée de l'autorisation pour il.

Autorisation

Ajouter des paramètres de rôle pour vos informations d'identification de service Dans cet exemple, définissez des autorisations de lecture pour vos informations d'identification de service afin d'accéder à toutes les ressources de votre abonnement. Si vous souhaitez en savoir plus, veuillez vous référer à : Contrôle d'accès basé sur le rôle Azure.


New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $azureAdApplication.ApplicationId
Parmi eux,

dispose de trois paramètres d'autorisation : RoleDefinitionName

  1. Reader dispose d'autorisations de lecture pour les ressources Azure.

  2. Le contributeur dispose de droits d'administration sur les ressources Azure, mais ne peut pas en autoriser d'autres.

  3. Le propriétaire dispose de droits de gestion sur les ressources Azure et peut également autoriser d'autres personnes à les gérer.

 

Appelez l'API Oauth2 pour obtenir le jeton

De cette façon, l'application Azure AD est créé et nous pouvons l'utiliser. Les trois informations suivantes sont utilisées pour obtenir le jeton d'authentification.

  1. telent-id correspond au telentID utilisé dans les informations d'abonnement.

  2. application-id ApplicationID renvoyé lors de la création de l'application.

  3. mot de passe de l'application Le mot de passe renseigné lors de la création de l'application.

Pour obtenir le Token, utilisez l'interface d'authentification de Azure login oauth2. Si vous souhaitez en savoir plus, veuillez vous référer à ce document : Utilisation de l'API REST Azure Resource Manager.

Veuillez vous référer au code suivant :


$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";
Après avoir exécuté la requête, vous obtiendrez les données du jeton, et access_token est le jeton d'accès.


{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1455680701",
"not_before": "1455676801",
"resource": "https://management.azure.com/",
"access_token": "eyJ0eXAiOi…"
}
Ajoutez ensuite le paramètre Authorization Header à la requête API à laquelle vous souhaitez accéder et définissez sa valeur sur :

Avant le jeton, Bearer doit être ajouté.

Exemple d'appel :


$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";

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn