ホームページ  >  記事  >  バックエンド開発  >  PHP が Azure Active Directory トークンを取得する方法の詳細な例

PHP が Azure Active Directory トークンを取得する方法の詳細な例

黄舟
黄舟オリジナル
2017-09-08 09:10:002277ブラウズ

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 を選択します

    現在のサブスクリプションを設定します この手順は、マルチサブスクリプション環境で実行する必要があります:

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

AD アプリケーションを作成する

新しく作成されたアプリケーション オブジェクトを表示します。 ApplicationId 属性。これは後でサービス資格情報、ロール設定、アクセス トークンを作成するために使用されます。

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

    PHP が Azure Active Directory トークンを取得する方法の詳細な例

  2. Azure AD アプリケーション作成サービスの資格情報:
  3. $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";
  4. サービス証明書が作成された後、最初は権限がありません。権限スコープを設定する必要があります。

Authorization

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


rrreee

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


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 までご連絡ください。