ゲートウェイとバックエンド間の承認に OAuth2 を使用するUse OAuth2 for authorization between the gateway and a backend

この記事では、Azure API Management ポリシーのサンプルを示し、ゲートウェイとバックエンド間の承認に OAuth2 を使用する方法を説明します。This article shows an Azure API management policy sample that demonstrates how to use OAuth2 for authorization between the gateway and a backend. AAD からアクセス トークンを取得してバックエンドに転送する方法を示します。It shows how to obtain an access token from AAD and forward it to the backend.

ポリシー コードを設定または編集するには、ポリシーの設定または編集に関するページで説明されている手順に従います。To set or edit a policy code, follow the steps described in Set or edit a policy. 他の例については、ポリシーのサンプルに関するページをご覧ください。To see other examples, see policy samples.

次のスクリプトでは、{{プロパティ}} で示されているプロパティを使います。The following script uses properties that appear in {{property}}. プロパティの詳細および API Management のポリシーでプロパティを使う方法については、こちらのトピックをご覧ください。To learn about properties and how to use them in API Management policies, see this topic.

ポリシーPolicy

コードを inbound ブロックに貼り付けます。Paste the code into the inbound block.

<!-- The policy defined in this file provides an example of using OAuth2 for authorization between the gateway and a backend. -->
<!-- It shows how to obtain an access token from Azure AD and forward it to the backend. -->

<!-- Send request to Azure AD to obtain a bearer token -->
<!-- Parameters: authorizationServer - format https://login.windows.net/TENANT-GUID/oauth2/token -->
<!-- Parameters: scope - a URI encoded scope value -->
<!-- Parameters: clientId - an id obtained during app registration -->
<!-- Parameters: clientSecret - a URL encoded secret, obtained during app registration -->

<!-- Copy the following snippet into the inbound section. -->

<policies>
  <inbound>
    <base />
      <send-request ignore-error="true" timeout="20" response-variable-name="bearerToken" mode="new">
        <set-url>{{authorizationServer}}</set-url>
        <set-method>POST</set-method>
        <set-header name="Content-Type" exists-action="override">
          <value>application/x-www-form-urlencoded</value>
        </set-header>
        <set-body>
          @{
              return "client_id={{clientId}}&resource={{scope}}&client_secret={{clientSecret}}&grant_type=client_credentials";

              // For identity providers other than Azure AD, try return statement below
              // return "client_id={{clientId}}&scope={{scope}}&client_secret={{clientSecret}}&grant_type=client_credentials";
          }
        </set-body>
      </send-request>

      <set-header name="Authorization" exists-action="override">
        <value>
          @("Bearer " + (String)((IResponse)context.Variables["bearerToken"]).Body.As<JObject>()["access_token"])
      </value>
      </set-header>

      <!--  Don't expose APIM subscription key to the backend. -->
      <set-header exists-action="delete" name="Ocp-Apim-Subscription-Key"/>
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

次の手順Next steps

APIM ポリシーの詳細については、以下をご覧ください。Learn more about APIM policies: