次の方法で共有


Authentication

この記事では、Power Platform API を呼び出すための Microsoft Entra セットアップの概要について説明します。 Power Platform API を介して利用可能なリソースにアクセスするには、Microsoft Entra からベアラー トークンを取得し、各要求と共にヘッダーとして送信する必要があります。 サポートしている ID の種類 (ユーザーとサービス プリンシパル) に応じて、この記事で説明するように、このベアラー トークンを取得するためのフローは異なります。

適切なアクセス許可を持つベアラー トークンを取得するには、次の手順を実行します。

  1. Microsoft Entra テナントでアプリケーション登録を作成する
  2. API のアクセス許可を構成する
  3. プラットフォームとリダイレクト URI を構成する
  4. (省略可能)証明書とシークレットを構成する
  5. アクセス トークンを要求する

ステップ 1. Microsoft Entra テナントでアプリケーションの登録を作成する

  1. Azure ポータルにアクセスします。
  2. ページの上部にある Microsoft Entra ID を 選択します。 次に、[ + 追加]>[アプリの登録]を選択します。
  3. [アプリケーションの 登録 ] ページに入力します。
    1. [名前] - Power Platform Admin SDK などの認識可能な名前をアプリケーションに付けます。
    2. サポートされているアカウントの種類 - [シングル テナントのみ] を選択 <会社名>
    3. リダイレクト URI — ここではこれをスキップします。 手順 3 で構成します。
  4. [登録] を選択して、アプリケーションを作成します。 登録が完了したら、概要ページの アプリケーション (クライアント) IDディレクトリ (テナント) ID を メモします。後で両方の値が必要になります。

Azure CLI を使用して登録を作成することもできます。

az login

az ad app create --display-name "Power Platform Admin SDK" --sign-in-audience AzureADMyOrg

このコマンドは JSON オブジェクトを返します。 appId値をメモします。この値はクライアント ID です。

ステップ 2. API アクセス許可の構成

新しいアプリの登録で、[ 管理 - API のアクセス許可 ] タブに移動します。[ アクセス許可の構成 ] セクションで、[ アクセス許可の追加] を選択します。 ダイアログ ボックスで、 組織で使用している API タブを選択し、 Power Platform API を検索します。 このような名前のエントリがいくつか表示される場合があるため、GUID 8578e004-a5c6-46e7-913e-12f58912df43 のエントリを使用してください。

GUID で検索するときに Power Platform API が一覧に表示されない場合は、引き続きアクセスできる可能性がありますが、可視性は更新されません。 強制的に更新するには、次のスクリプトを実行します。

#Install the Microsoft Graph PowerShell SDK module
Install-Module Microsoft.Graph -Scope CurrentUser -Repository PSGallery -Force

Connect-MgGraph
New-MgServicePrincipal -AppId 8578e004-a5c6-46e7-913e-12f58912df43 -DisplayName "Power Platform API"

ここから、必要なアクセス許可を選択します。 これらのアクセス許可は名前空間ごとにグループ化 されます。 名前空間内には、アプリケーション パッケージの読み取りアクセス許可を付与する AppManagement.ApplicationPackages.Read などのリソースの種類とアクションが表示されます。 詳細については、 アクセス許可のリファレンス 記事を参照してください。

注意

Power Platform API では、現時点でのみ委任されたアクセス許可が使用されます。 ユーザー コンテキストで実行されるアプリケーションの場合は、 スコープ パラメーターを使用して委任されたアクセス許可を要求します。 これらのアクセス許可は、サインインしているユーザーの特権をアプリケーションに委任するため、Power Platform API エンドポイントを呼び出すときにユーザーとして機能できます。

サービス プリンシパル ID の場合は、アプリケーションのアクセス許可を使用しないでください。 代わりに、アプリの登録を作成した後、RBAC ロールを割り当てて、スコープ付きアクセス許可 ( 共同作成者閲覧者など) を付与します。 詳細については、「 チュートリアル: サービス プリンシパルに RBAC ロールを割り当てる」を参照してください

必要なアクセス許可をアプリケーションに追加したら、[ 管理者の同意を付与 する] を選択してセットアップを完了します。 管理者の同意を付与することで、テナント内のすべてのユーザーに対するアクセス許可を承認し、アプリを初めて使用するときに対話型の同意ダイアログが表示されないようにします。 ユーザーごとの対話型の同意を希望する場合は、 Microsoft ID プラットフォームと OAuth 2.0 承認コード フローに従います。

Azure CLI を使用して管理者の同意を付与することもできます。

# Replace <app-id> with your application (client) ID
az ad app permission admin-consent --id <app-id>

ステップ 3. プラットフォームとリダイレクト URI を構成する

ユーザーに代わって認証を行う SDK、PowerShell スクリプト、デスクトップ アプリケーションでは、Microsoft Entra が認証後にトークンをアプリケーションに返すことができるように、リダイレクト URI が必要です。

  1. アプリの登録内で、[ 管理] - [認証] に移動します。

  2. [ リダイレクト URI の追加] を選択し、[ モバイル アプリケーションとデスクトップ アプリケーション] を選択します。

  3. 次の組み込みのリダイレクト URI を選択します。

    https://login.microsoftonline.com/common/oauth2/nativeclient

  4. [ 構成] を 選択して保存します。

Azure CLI を使用してリダイレクト URI を追加することもできます。

# Replace <app-id> with your application (client) ID
az ad app update --id <app-id> --public-client-redirect-uris https://login.microsoftonline.com/common/oauth2/nativeclient

パブリック クライアント設定

同じ [認証] タブの [詳細設定] セクションに、[パブリック クライアント フローを許可する] トグルがあります。 トークン要求本文でユーザー名とパスワードを直接送信するリソース所有者パスワード資格情報 (ROPC) フローを使用する場合にのみ、このトグルを [はい ] に設定します。

このフローは、多要素認証が有効になっているアカウントでは機能しません。 対話型ブラウザーまたはデバイス コード フローの場合、この設定を有効にする必要はありません。

ステップ 4. (省略可能)証明書とシークレットを構成する

アプリでリソース自体 ( サービス プリンシパルとも呼ばれます) の読み取りと書き込みが必要な場合、認証には 2 つの方法があります。 証明書を使用するには、[ 管理] - [証明書とシークレット] に移動します。 [ 証明書 ] セクションで、認証に使用できる x509 証明書をアップロードします。

もう 1 つの方法では、シークレット セクションを使用してクライアント シークレットを生成します。 自動化が必要になった場合に使用できるように、シークレットを安全な場所に保存してください。 証明書またはシークレットオプションを使用すると、Microsoft Entra で認証を行い、このクライアントのトークンを受け取り、REST API または PowerShell コマンドレットに渡すことができます。

ステップ 5 アクセス トークンの要求

アクセス ベアラー トークンは、2 つの方法で取得できます。一方の方法はユーザー名とパスワード用、もう 1 つはサービス プリンシパル用です。

ユーザー名とパスワード フロー

パブリック クライアント セクションを必ずお読みください。 次に、HTTP 経由で、ユーザー名とパスワードのペイロードを使用して Microsoft Entra ID に POST 要求を送信します。

Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Accept: application/json
POST https://login.microsoftonline.com/YOUR_TENANT.COM/oauth2/v2.0/token
BODY:
client_id={CLIENT_ID_FROM_AZURE_CLIENT_APP}&scope=https://api.powerplatform.com/.default&username={USER_EMAIL_ADDRESS}&password={PASSWORD}&grant_type=password

前の例には、Microsoft Entra ID でクライアント アプリケーションから取得できるプレースホルダーが含まれています。 Power Platform API の後続の呼び出しに使用できる応答を受け取ります。

{
  "token_type": "Bearer",
  "scope": "https://api.powerplatform.com/AppManagement.ApplicationPackages.Install https://api.powerplatform.com/AppManagement.ApplicationPackages.Read https://api.powerplatform.com/.default",
  "expires_in": 4747,
  "ext_expires_in": 4747,
  "access_token": "eyJ0eXAiOiJKV1QiLCJu..."
}

認証 HTTP ヘッダーを使用して、Power Platform API への後続の呼び出しで access_token 値 を使用します。

サービス プリンシパル フロー

証明書とシークレットの構成」セクションを 必ずお読みください。 次に、クライアント シークレット ペイロードを使用して、HTTP 経由で Microsoft Entra ID に POST 要求を送信します。 この認証方法は、多くの場合、サービス プリンシパル認証と呼ばれます。

重要

サービス プリンシパル認証を使用する前に、この記事の前の手順 1 から 4 を実行して、証明書またはクライアント シークレットを使用してアプリの登録を作成して構成します。 次に、サービス プリンシパルに RBAC ロールを割り当てて、そのアクセス レベルを制御します。 詳細については、「 チュートリアル: サービス プリンシパルに RBAC ロールを割り当てる」を参照してください

Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Accept: application/json
POST https://login.microsoftonline.com/YOUR_TENANT.COM/oauth2/v2.0/token
BODY:
client_id={CLIENT_ID_FROM_AZURE_CLIENT_APP}&scope=https://api.powerplatform.com/.default&client_secret={SECRET_FROM_AZURE_CLIENT_APP}&grant_type=client_credentials

前の例には、Microsoft Entra ID でクライアント アプリケーションから取得できるプレースホルダーが含まれています。 Power Platform API の後続の呼び出しに使用できる応答を受け取ります。

{
  "token_type": "Bearer",
  "expires_in": 3599,
  "ext_expires_in": 3599,
  "access_token": "eyJ0eXAiOiJKV1..."
}

認証 HTTP ヘッダーを使用して、Power Platform API への後続の呼び出しで access_token 値 を使用します。 サービス プリンシパルの有効なアクセス許可は、割り当てられた RBAC ロールによって決まります。 ロールを割り当てる方法については、「 チュートリアル: サービス プリンシパルに RBAC ロールを割り当てる」を参照してください。

Azure CLI を使用したクイック スタート

次のスクリプトでは、アプリの登録をエンド ツー エンドで作成します。 各コマンドを順番に実行し、プレースホルダーの値を独自の値に置き換えます。

# Sign in to Azure CLI
az login

# Create the app registration (single tenant)
az ad app create --display-name "Power Platform Admin SDK" --sign-in-audience AzureADMyOrg

# Save the app ID from the output, then create a service principal for it
az ad sp create --id <app-id>

# Add a delegated permission (example: AppManagement.ApplicationPackages.Read)
# The --api value is the Power Platform API app ID.
# The --api-permissions value is the permission ID and type (Scope = delegated).
# Repeat this command for each permission you need. See the Permission reference for IDs.
az ad app permission add --id <app-id> \
  --api 8578e004-a5c6-46e7-913e-12f58912df43 \
  --api-permissions <permission-id>=Scope

# Grant admin consent so users aren't prompted individually
az ad app permission admin-consent --id <app-id>

# Add the native client redirect URI for interactive auth
az ad app update --id <app-id> \
  --public-client-redirect-uris https://login.microsoftonline.com/common/oauth2/nativeclient

これらのコマンドを実行した後は、SDK、PowerShell、または直接 REST 呼び出しでアプリの登録を使用できます。 --api-permissions パラメーターのアクセス許可 ID を検索するには、Permission リファレンスを参照してください

一般的な問題のトラブルシューティング

このエラーは、管理者がアプリの登録に対する API アクセス許可に同意していない場合に発生します。 アプリの登録に移動し>アプリ>API のアクセス許可を選択し、[管理者の同意を付与する] を選択します。

または、以下を実行します。

az ad app permission admin-consent --id <app-id>

"ユーザーがアプリケーションのロールに割り当てされていません" エラー

このエラーは、アプリの登録に関連付けられているエンタープライズ アプリケーションで、[ユーザーの割り当てが必要] が [はい] に設定されていることを意味します。 この設定を有効にすると、アプリケーションに明示的に割り当てられているユーザーまたはグループのみがサインインできます。 このエラーを解決するには、次のいずれかのアクションを実行します。

  • Microsoft Entra ID>Enterprise アプリケーションに移動し>アプリの>プロパティを [割り当て必要][いいえ] に設定します。
  • 関連するユーザーまたはセキュリティ グループを [ユーザーとグループ] に追加します。

アクセスをブロックする条件付きアクセス ポリシー

組織が条件付きアクセス ポリシーを適用すると、アプリ登録のトークン取得がブロックされる可能性があります。 一般的な原因としては、デバイスのコンプライアンス要件、場所の制限、リスクベースのポリシーなどがあります。 Microsoft Entra 管理者と協力して、アプリの登録をポリシーから除外するか、クライアントがポリシー要件を満たしていることを確認します。

API ピッカーに "Power Platform API" が見つかりません

API のアクセス許可ダイアログで名前または GUID で Power Platform API を検索しても結果が返されない場合、サービス プリンシパルはテナントに作成されません。 手順 2 の強制更新の手順に従って作成します。

Power Platform SDK と PowerShell で認証する

次の例は、各 SDK と PowerShell を使用して認証し、サンプル API 呼び出しを行う方法を示しています。 これらの例を実行する前に、この記事の前の手順 1 から 3 を実行して、アプリの登録を作成して構成します。

対話型認証 (委任されたユーザー)

対話型認証では、ユーザーがサインインするためのブラウザー ウィンドウが開きます。 このフローは、開発者スクリプト、管理ツール、およびユーザーが存在するすべてのシナリオに最適です。

# Sign in interactively (opens a browser)
Connect-AzAccount

# Get an access token for the Power Platform API
$token = Get-AzAccessToken -ResourceUrl "https://api.powerplatform.com"

# Call the List Environments endpoint as an example
$headers = @{ Authorization = "Bearer $($token.Token)" }
$environments = Invoke-RestMethod -Uri "https://api.powerplatform.com/environmentmanagement/environments?api-version=2024-10-01" -Headers $headers
$environments.value | Format-Table name, properties.displayName

機密クライアント (サービス プリンシパル)

機密クライアント認証では、クライアント シークレットまたは証明書が使用され、ユーザーの操作は必要ありません。 この認証フローは、バックグラウンド サービス、パイプライン、自動化に最適です。

重要

サービス プリンシパル認証を使用する前に、上記の手順 1 から 4 を実行して、証明書またはクライアント シークレットを使用してアプリの登録を作成して構成します。 次に、サービス プリンシパルに RBAC ロールを割り当てて、そのアクセス レベルを制御します。 詳細については、「 チュートリアル: サービス プリンシパルに RBAC ロールを割り当てる」を参照してください。

$tenantId = "YOUR_TENANT_ID"
$clientId = "YOUR_CLIENT_ID"
$clientSecret = "YOUR_CLIENT_SECRET"

# Request a token using client credentials
$body = @{
    client_id     = $clientId
    scope         = "https://api.powerplatform.com/.default"
    client_secret = $clientSecret
    grant_type    = "client_credentials"
}
$tokenResponse = Invoke-RestMethod -Method Post `
    -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" `
    -ContentType "application/x-www-form-urlencoded" `
    -Body $body

# Call the List Environments endpoint as an example
$headers = @{ Authorization = "Bearer $($tokenResponse.access_token)" }
$environments = Invoke-RestMethod -Uri "https://api.powerplatform.com/environmentmanagement/environments?api-version=2024-10-01" -Headers $headers
$environments.value | Format-Table name, properties.displayName

チュートリアル: サービス プリンシパルに RBAC ロールを割り当てる
Power Platform 管理センターのロールベースのアクセス制御
アクセス許可の参照