ホームページ  >  記事  >  バックエンド開発  >  PHP を使用して Azure Active Directory トークンを取得する方法

PHP を使用して Azure Active Directory トークンを取得する方法

一个新手
一个新手オリジナル
2017-09-08 09:55:091212ブラウズ

Azure Rest API を呼び出すとき、それが Azure Resource Manager に属する API である場合、アクセスする前に Azure Active Directory (Azure AD) 認証を使用してトークン (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 以供后续程序使用。

选择当前订阅 ID

设置当前订阅,多订阅环境下需要执行该步骤 :

Set-AzureRmContext -SubscriptionId <subscription ID>

创建 AD 应用

查看新创建的应用对象,属性 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

Azure アカウント (PowerShell) にログインします
  1. 取得した内容を記録します後で使用するための TenantID。
  2. 現在のサブスクリプション ID を選択します

    現在のサブスクリプションを設定します。この手順はマルチサブスクリプション環境で実行する必要があります:
  3. $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";
  4. AD アプリケーションを作成する

    新しく作成されたアプリケーション オブジェクト、属性 ApplicationId を表示します。これは、後でサービスを作成するために使用されます。資格情報、ロール設定、およびアクセス トークン。
  5. {
    "token_type": "Bearer",
    "expires_in": "3600",
    "expires_on": "1455680701",
    "not_before": "1455676801",
    "resource": "https://management.azure.com/",
    "access_token": "eyJ0eXAiOi…"
    }

サービス資格情報を作成する

Azure AD アプリケーションサービス認証情報を作成します:

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

    サービスが認証情報の後には、最初は権限がありません。権限の範囲を設定する必要があります。
  1. 認可

  2. この例では、サービス資格情報のロール設定を追加して、サブスクリプション内のすべてのリソースにアクセスするためのサービス資格情報の読み取り権限を設定します。 詳細については、「Azure ロールベースのアクセス制御」を参照してください。
  3. rrreee

    RoleDefinitionName には 3 つのアクセス許可設定があります:

  4. Reader には Azure リソースの読み取りアクセス許可があります。

投稿者は Azure リソースに対する管理者権限を持っていますが、他のリソースを承認することはできません。

所有者は Azure リソースに対する管理権限を持ち、他のユーザーにリソースの管理を許可することもできます。

Oauth2 APIを呼び出してトークンを取得します

これで、次の3つの情報を使用して認証トークンを取得できます。

🎜🎜🎜telent-idは、契約情報で使用されるtelentIDに対応します。 🎜🎜🎜🎜application-id 作成されたアプリケーションによって返される ApplicationID。 🎜🎜🎜🎜アプリパスワード アプリ作成時に入力したパスワードです。 🎜🎜🎜🎜トークンを取得するには、Azure ログイン oauth2 の認証インターフェイスを使用します。詳細については、「Azure Resource Manager REST API の使用」のドキュメントを参照してください。 🎜🎜次のコードを参照してください: 🎜rrreee🎜 クエリを実行すると、トークン データが取得されます。access_token はアクセス トークンです。 🎜rrreee🎜次に、アクセスする API リクエストに Authorization Header 設定を追加し、その値を次のように設定します: 🎜🎜🎜🎜🎜 Token の前に Bearer を追加します。 🎜🎜呼び出し例: 🎜rrreee

以上がPHP を使用して Azure Active Directory トークンを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。