次の方法で共有


資格情報マネージャーの構成 - バックエンド API へのユーザー委任アクセス

適用対象: すべての API Management レベル

この記事では、Microsoft Entra ユーザーまたはグループにバックエンド OAuth 2.0 API への委任されたアクセス許可を付与するマネージド 接続 を構成して使用する手順の概要について説明します。 認証されたユーザーの代わりにクライアント アプリ (またはボット) がバックエンドのセキュリティで保護されたオンライン リソースにアクセスする必要がある場合 (メールの確認や注文など) には、次の手順に従います。

シナリオの概要

このシナリオは、 承認コード 付与の種類で構成された資格情報プロバイダーにのみ適用されます。

このシナリオでは、クライアント アプリ (またはボット) が Microsoft Entra ユーザーまたはグループに代わってバックエンド API にアクセスできるようにするマネージド 接続 を構成します。 たとえば、バックエンド GitHub API にアクセスし、サインインしているユーザーに固有のデータにアクセスする静的 Web アプリがあるとします。 次の図は、シナリオを示しています。

ユーザーが委任したアクセス許可のプロセス フローを示す図。

  • ユーザーは、アプリが自分の代わりにセキュリティで保護されたリソースにアクセスすることを承認し、アプリを承認するには、ユーザーが自分の ID を認証する必要があります。
  • ユーザーに代わって操作を実行するために、アプリは Microsoft Graph や GitHub などの外部バックエンド サービスを呼び出します。
  • 各外部サービスには、これらの呼び出しをセキュリティで保護する方法があります。たとえば、ユーザーを一意に識別するユーザー トークンを使用します。
  • 外部サービスへの呼び出しをセキュリティで保護するには、ユーザーのトークンを取得できるように、アプリがユーザーにサインインを求める必要があります。
  • 構成の一部として、資格情報プロバイダーは API Management インスタンスの資格情報マネージャーを使用して登録されます。 これには、有効な OAuth クライアント ID とシークレット、有効にする OAuth スコープ、その ID プロバイダーに必要なその他の接続メタデータと共に、使用する ID プロバイダーに関する情報が含まれています。
  • また、接続が作成され、ユーザーのサインインとユーザー トークンの取得に役立ち、管理できるように使用されます。

[前提条件]

  • アプリの登録を作成し、アプリのアクセス許可に対する管理者の同意を付与するアクセス許可を持つ Microsoft Entra テナントへのアクセス。 詳細情報

    独自の開発者テナントを作成する場合は、 Microsoft 365 開発者プログラムにサインアップできます。

  • アクセス許可を委任するテナント内の 1 つ以上のユーザーまたはグループ。

  • 実行中の API Management インスタンス。 必要に応じて、 Azure API Management インスタンスを作成します

  • ユーザーまたはグループの代わりにアクセスするバックエンド OAuth 2.0 API。

手順 1: Azure API Management データ プレーン サービス プリンシパルをプロビジョニングする

ユーザーまたはグループに必要な委任されたアクセス許可を付与するには、Azure API Management Data Plane サービス プリンシパルをプロビジョニングする必要があります。 Azure PowerShell を使用してサービス プリンシパルをプロビジョニングするには、次の手順に従います。

  1. Azure PowerShell にサインインします。

  2. AzureAD モジュールがまだインストールされていない場合は、次のコマンドを使用してインストールします。

    Install-Module -Name AzureAD -Scope CurrentUser -Repository PSGallery -Force
    
  3. 次のコマンドを使用してテナントに接続します。

    Connect-AzureAD -TenantId "<YOUR_TENANT_ID>"
    
  4. メッセージが表示されたら、テナントの管理者アカウント資格情報でサインインします。

  5. 次のコマンドを使用して、Azure API Management データ プレーン サービス プリンシパルをプロビジョニングします。

    New-AzureADServicePrincipal -AppId c8623e40-e6ab-4d2b-b123-2ca193542c65 -DisplayName "Azure API Management Data Plane"
    

手順 2: Microsoft Entra アプリの登録を作成する

ユーザー委任用の Microsoft Entra ID アプリケーションを作成し、API Management で接続を読み取るための適切なアクセス許可を付与します。

  1. テナントで十分なアクセス許可を持つアカウントで Azure portal にサインインします。
  2. Azure サービスで、Microsoft Entra ID を検索します
  3. 左側のメニューで、[管理]>[アプリの登録]、[+ 新規登録] の順に選択します。
  4. [ アプリケーションの登録 ] ページで、アプリケーション登録設定を入力します。
    1. [ 名前] に、 UserPermissions など、アプリのユーザーに表示されるわかりやすい名前を入力します。
    2. [サポートされているアカウントの種類] で、シナリオに合ったオプション (この組織のディレクトリ内のアカウントのみ (シングル テナント) など) を選択します。
    3. リダイレクト URIWeb に設定し、「https://www.postman-echo.com/get」と入力します。
    4. 登録 を選択します。
  5. 左側のメニューで、[ 管理>API アクセス許可] を選択し、[ + アクセス許可の追加] を選択します。
    1. 組織で 使用している API タブを選択し、「 Azure API Management Data Plane」と入力して選択します。
    2. [ アクセス許可] で [ Authorizations.Read] を選択し、[ アクセス許可の追加] を選択します。
  6. 左側のメニューで、[ 概要] を選択します。 [ 概要 ] ページで、 アプリケーション (クライアント) ID の値を見つけて、後の手順で使用するために記録します。
  7. 左側のメニューで、[ 管理>Certificates > シークレット] を選択し、[ + 新しいクライアント シークレット] を選択します。
    1. [Description]\(説明\) を入力します。
    2. [有効期限] のオプションを選択します。
    3. [] を選択し、[] を追加します。
    4. ページを離れる前に、クライアント シークレットの をコピーします。 後の手順で必要になります。

手順 3: API Management で資格情報プロバイダーを構成する

  1. Azure portal にサインインし、API Management インスタンスに移動します。
  2. 左側のメニューで、 API>Credential Manager を選択し、[ + 作成] を選択します。 ポータルで API 資格情報を作成するスクリーンショット。
  3. [ 資格情報プロバイダーの作成 ] ページで、API の資格情報プロバイダーの設定を入力します。 このシナリオでは、[ 許可の種類] で [ 承認コード] を選択する必要があります。 詳細については、「 資格情報マネージャーで資格情報プロバイダーを構成する」を参照してください。
  4. を選択してを作成します。
  5. メッセージが表示されたら、表示されている OAuth リダイレクト URL を確認し、[ はい ] を選択して、アプリ登録で入力した URL と一致することを確認します。

手順 4: 接続を構成する

資格情報プロバイダーを作成したら、プロバイダーへの接続を追加できます。 [ 接続 ] タブで、接続の手順を完了します。

  1. 接続名を入力し、[保存] を選択します。
  2. [手順 2: 接続にログイン] で、[ログイン] ボタンを選択します。 アクセスを承認し、API Management に戻る手順を完了します。
  3. [手順 3: この接続にアクセスできるユーザーを決定する (アクセス ポリシー)]で、[+ 追加] を選択します。 委任シナリオに応じて、[ ユーザー ] または [ グループ] を選択します。
  4. [ 項目の選択 ] ウィンドウで、次の順序で選択を行います。
    1. まず、1 人以上のユーザー (またはグループ) を検索して追加し、選択ボックスをオンにします。
    2. 次に、表示される一覧で、前のセクションで作成したアプリの登録を検索します。
    3. 次に、[ 選択] をクリックします。
  5. [Complete]\(完了\) を選択します。

新しい接続が接続の一覧に表示され、[ 接続済み] の状態が表示されます。 資格情報プロバイダー用に別の接続を作成する場合は、前の手順を実行します。

ヒント

Azure portal を使用して、資格情報プロバイダーへの接続をいつでも追加、更新、または削除できます。 詳細については、「 複数の接続を構成する」を参照してください。

手順 5: Microsoft Entra ID アクセス トークンを取得する

バックエンド API へのユーザー委任アクセスを有効にするには、委任されたユーザーまたはグループのアクセス トークンを実行時に get-authorization-context ポリシーで提供する必要があります。 通常、これは 、Microsoft 認証ライブラリ (MSAL) を使用して、クライアント アプリでプログラムによって行われます。 このセクションでは、テスト用のアクセス トークンを作成する手動の手順について説明します。

  1. ブラウザーに次の URL を貼り付け、 <tenant-id><client-id> の値を Microsoft Entra アプリ登録の値に置き換えます。

    https://login.microsoftonline.com/<tenant-id>/oauth2/authorize?client_id=<client-id>&response_type=code&redirect_uri=https://www.postman-echo.com/get&response_mode=query&resource=https://azure-api.net/authorization-manager&state=1234`
    
  2. メッセージが表示されたら、サインインします。 応答本文で、指定された コード の値をコピーします (例: "0.AXYAh2yl…")。

  3. 次の POST 要求をトークン エンドポイントに送信し、 <tenant-id> をテナント ID に置き換え、アプリ登録の指定されたヘッダーと本文パラメーター、前の手順でコピーしたコードを含めます。

    POST https://login.microsoftonline.com/<tenant-id>/oauth2/token HTTP/1.1
    

    Header

    Content-Type: application/x-www-form-urlencoded

    Body

    grant_type: "authorization_code"
    client_id: <client-id>
    client_secret: <client-secret>
    redirect_uri: <redirect-url> 
    code: <code>   ## The code you copied in the previous step
    
  4. 応答本文で、指定された access_token の値をコピーします (例: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IjZqQmZ1...)。 この値は、次の手順のポリシー構成で渡します。

手順 6: バックエンド API の get-authorization-context ポリシーを構成する

ユーザーまたはグループの代わりにアクセスするバックエンド API の get-authorization-context ポリシーを構成します。 テスト目的で、前のセクションで取得したユーザーの Microsoft Entra ID アクセス トークンを使用してポリシーを構成できます。

  1. Azure portal にサインインし、API Management インスタンスに移動します。

  2. 左側のメニューで、 API>API を選択し、OAuth 2.0 バックエンド API を選択します。

  3. [すべての操作] を選択します。 [ 受信処理 ] セクションで、(</>) (コード エディター) アイコンを選択します。

  4. get-authorization-context セクションでinbound ポリシーを構成し、identity-typejwtに設定します。

    <policies>
        <inbound>
            [...]
            <get-authorization-context provider-id="<credential-provider-id>" authorization-id="<connection-id>" context-variable-name="auth-context" identity-type="jwt" identity="<access-token>" ignore-error="false" />
            [...]
        </inbound> 
    </policies>
    

前のポリシー定義で、次の値を置き換えます。

  • <credential-provider-id><connection-id> の箇所には、前の手順で構成した資格情報プロバイダーの名前と接続の名前を設定します。

  • <access-token> 前の手順で生成した Microsoft Entra ID アクセス トークンを使用します。

手順 7: API をテストする

  1. [ テスト ] タブで、構成した操作を 1 つ選択します。

  2. [Send] を選択します。

    応答が成功すると、バックエンド API からユーザー データが返されます。