Maison >développement back-end >tutoriel php >Comment obtenir un jeton Azure Active Directory à l'aide de PHP

Comment obtenir un jeton Azure Active Directory à l'aide de PHP

一个新手
一个新手original
2017-09-08 09:55:091331parcourir

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

Définissez l'abonnement actuel. Cette étape doit être effectuée dans un environnement multi-abonnement :

Set-AzureRmContext -SubscriptionId <subscription ID>

Créer une application AD.

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

$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

Une fois le certificat de service créé, il ne dispose initialement d'aucune autorisation. Nous devons définir la portée des autorisations pour celui-ci.

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, RoleDefinitionName dispose de trois paramètres d'autorisation :

  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éée. Nous pouvons utiliser le. suivez les trois informations 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 :

Jeton avant d'ajouter Bearer .

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