OAuth 2.0 承認と Microsoft Entra ID を使用して Azure API Management で API を保護する

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

この記事では、OAuth 2.0 プロトコルと Microsoft Entra ID を使用して、API を保護するように Azure API Management インスタンスを構成する大まかな手順について学習します。

API の認可の概念的概要については、API Management での API に対する認証と認可をご覧ください。

前提条件

この記事の手順に従う前に、次のものが必要です。

  • API Management インスタンス
  • API Management インスタンスを使用する公開された API
  • Microsoft Entra テナント

概要

これらの手順に従って、OAuth 2.0 承認と Microsoft Entra ID を使用して API Management で API を保護します。

  1. アプリケーション (この記事では、"バックエンドアプリ" と呼ばれます) を Microsoft Entra ID に登録して API へのアクセスを保護します。

    API にアクセスするには、ユーザーまたはアプリケーションが各 API 要求で、このアプリへのアクセス権を付与する有効な OAuth トークンを取得、提示します。

  2. API Management で validate-jwt ポリシーを構成し、各受信 API 要求で提示される OAuth トークンを検証します。 有効な要求は API に渡すことができます。

OAuth 承認フローと、必要な OAuth トークンを生成する方法の詳細については、この記事では取り上げません。 通常、個別のクライアント アプリを使用して、API へのアクセスを承認するトークンが Microsoft Entra ID から取得されます。 詳細情報へのリンクについては、「次のステップ」を参照してください。

API を表すために Microsoft Entra ID にアプリケーションを登録する

Azure portal を使用して、API を表すアプリケーションをまず登録することにより、Microsoft Entra ID で API を保護します。

アプリの登録の詳細については、次を参照してください。「クイックスタート:Web API を公開するようにアプリケーションを構成する」。

  1. Azure portal で、 [アプリの登録] を検索して選択します。

  2. [新規登録] を選択します。

  3. [アプリケーションの登録] ページが表示されたら、以下のアプリケーションの登録情報を入力します。

    • [名前] セクションに、アプリのユーザーに表示されるわかりやすいアプリケーション名を入力します (例: backend-app)。
    • [サポートされているアカウントの種類] セクションで、シナリオに適したオプションを選択します。
  4. [リダイレクト URI] セクションは空のままにします。

  5. [登録] を選択して、アプリケーションを作成します。

  6. アプリの [概要] ページで、 [アプリケーション (クライアント) ID] の値を見つけ、後で使用するために記録します。

  7. サイド メニューの [管理] セクションで、 [API の公開] を選択し、 [アプリケーション ID URI] を既定値に設定します。 バックエンドアプリへのアクセス用の OAuth 2.0 トークンを取得するために個別のクライアント アプリを開発するには、後で使用するためにこの値を記録しておきます。

  8. [スコープの追加] ボタンを選択して、 [スコープの追加] ページを表示します。

    1. 新しい [スコープ名][管理者の同意の表示名][管理者の同意の説明] を入力します。
    2. [有効] のスコープ状態が選択されていることを確認します。
  9. [Scope の追加] ボタンを選択してスコープを作成します。

  10. 前の 2 つの手順を繰り返して、API でサポートされているすべてのスコープを追加します。

  11. スコープが作成されたら、後で使用するためにそれらを書き留めておきます。

要求を事前承認する JWT 検証ポリシーを構成する

次のポリシーの例では、<inbound> ポリシー セクションへの追加時に、Authorization ヘッダーで示される Microsoft Entra ID から取得されたアクセス トークン内の対象ユーザーのクレーム値を確認します。 トークンが有効ではない場合、エラー メッセージを返します。 シナリオに適したポリシー スコープでこのポリシーを構成します。

  • openid-config URL では、aad-tenant は Microsoft Entra ID のテナント ID です。 この値は、Azure portal (Microsoft Entra リソースの [概要] ページなど) で見つけます。 ここに示す例では、シングルテナントの Microsoft Entra アプリと v2 構成エンドポイントを想定しています。
  • claim の値は、Microsoft Entra IDに登録したバックエンド アプリのクライアント ID です。
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
    <openid-config url="https://login.microsoftonline.com/{aad-tenant}/v2.0/.well-known/openid-configuration" />
    <audiences>
        <audience>{audience-value - (ex:api://guid)}</audience>
    </audiences>
    <issuers>
        <issuer>{issuer-value - (ex: https://sts.windows.net/{tenant id}/)}</issuer>
    </issuers>
    <required-claims>
        <claim name="aud">
            <value>{backend-app-client-id}</value>
        </claim>
    </required-claims>
</validate-jwt>

Note

上記の openid-config URL は、v2 エンドポイントに対応しています。 v1 openid-config エンドポイントの場合は、https://login.microsoftonline.com/{aad-tenant}/.well-known/openid-configuration を使用します。

ポリシーの構成方法については、ポリシーの設定と編集に関する記事をご覧ください。 JWT 検証に関するその他のカスタマイズについては、validate-jwt リファレンスを参照してください。 Microsoft Entra サービスによって提供された JWT を検証するために、API Management でも validate-azure-ad-token ポリシーが提供されます。

承認ワークフロー

  1. ユーザーまたはアプリケーションは、バックエンドアプリへのアクセス権を付与するアクセス許可を持つトークンを Microsoft Entra ID から取得します。

  2. API Management への API 要求の Authorization ヘッダーにトークンが追加されます。

  3. API Management で、validate-jwt ポリシーを使用してトークンが検証されます。

    • 要求に有効なトークンがない場合、API Management はそれをブロックします。

    • 要求に有効なトークンが付随する場合、ゲートウェイは API に要求を転送できます。

次のステップ