Edge Management API で外部 IDP を使用する

基本認証は、Edge Management API への呼び出しを行うときに認証を行う方法の 1 つです。たとえば、Edge Management API に次の curl リクエストを送信して、組織に関する情報にアクセスできます。

curl -u USER_NAME:PASSWORD https://MS_IP_DNS:8080/v1/organizations/ORG_NAME

この例では、curl -u オプションを使用して、基本認証の認証情報を渡します。また、次の例に示すように、Bearer ヘッダーで OAuth2 トークンを渡して Edge Management API 呼び出しを行うこともできます。

curl -H "Authorization: Bearer ACCESS_TOKEN" https://MS_IP_DNS:8080/v1/organizations/ORG_NAME

認証に外部 IDP を有効にした後、必要に応じて基本認証を無効にできます。Basic 認証を無効にすると、Basic 認証をサポートする Edge Management API 呼び出しに依存するすべてのスクリプト(Maven、シェル、apigeetool など)が機能しなくなります。基本認証を使用する API 呼び出しとスクリプトを更新して、Bearer ヘッダーで OAuth2 アクセス トークンを渡す必要があります。

get_token を使用してトークンを取得、更新する

get_token ユーティリティは、基本認証の認証情報(場合によってはパスコード)を OAuth2 アクセス トークンと更新トークンに交換します。get_token ユーティリティは認証情報を受け取り、有効なアクセス トークンを返します。トークンを更新できる場合、ユーティリティはトークンを更新して返します。更新トークンの有効期限が切れると、ユーザー認証情報の入力を求められます。

get_token ユーティリティは、トークンをディスクに保存し、必要に応じて使用できるようにします。また、有効なアクセス トークンを stdout に出力します。そこから、Postman などのブラウザ拡張機能を使用するか、curl で使用するために環境変数に埋め込むことができます。

Edge Management API 呼び出しを行うための OAuth2 アクセス トークンを取得するには:

  1. sso-cli バンドルをダウンロードします。
    curl http://EDGE_SSO_IP_DNS:9099/resources/scripts/sso-cli/ssocli-bundle.zip -o "ssocli-bundle.zip"

    ここで、EDGE_SSO_IP_DNS は Apigee SSO モジュールをホストするマシンの IP アドレスまたは DNS 名です。Apigee SSO で TLS を構成した場合は、https と正しい TLS ポート番号を使用します。

  2. 次の例のように、ssocli-bundle.zip バンドルを解凍します。
    unzip ssocli-bundle.zip
  3. 次の例に示すように、/usr/local/bin に get_token をインストールします。
    ./install -b PATH

    -b オプションでは、別の場所を指定します。

  4. SSO_LOGIN_URL 環境変数を、次の形式でログイン URL に設定します。
    export SSO_LOGIN_URL="http://EDGE_SSO_IP_DNS:9099"

    ここで、EDGE_SSO_IP_DNS は Apigee SSO モジュールをホストするマシンの IP アドレスです。Apigee SSO で TLS を構成した場合は、https と正しい TLS ポート番号を使用します。

  5. (SAML のみ)ブラウザで次の URL に移動して、ワンタイム パスコードを取得します。
    http://EDGE_SSO_IP_DNS:9099/passcode

    Apigee SSO で TLS を構成した場合は、https と正しい TLS ポート番号を使用します。

    このリクエストは、URL を更新して新しいパスコードを取得するか、get_token でパスコードを使用してアクセス トークンを生成するまで有効なワンタイム パスコードを返します。

    パスコードを使用できるのは、SAML IDP で認証する場合のみです。パスコードを使用して LDAP IDP で認証することはできません。

  6. 次の例に示すように、get_token を呼び出して OAuth2 アクセス トークンを取得します。
    get_token -u EMAIL_ADDRESS

    ここで、EMAIL_ADDRESS は Edge ユーザーのメールアドレスです。

    (SAML のみ)次の例に示すように、メールアドレスに加えてコマンドラインでパスコードを入力します。

    get_token -u EMAIL_ADDRESS -p PASSCODE

    get_token ユーティリティは、OAuth2 アクセス トークンを取得して画面に出力し、そのトークンと更新トークンを ~/.sso-cli に書き込みます。

  7. 次の例に示すように、アクセス トークンを Bearer ヘッダーとして Edge Management API 呼び出しに渡します。
    curl -H "Authorization: Bearer ACCESS_TOKEN"
      https://MS_IP:8080/v1/organizations/ORG_NAME
  8. 新しいアクセス トークンを初めて取得した後は、次の例に示すように、アクセス トークンを取得して 1 つのコマンドで API 呼び出しに渡すことができます。
    header=`get_token` && curl -H "Authorization: Bearer $header"
      https://MS_IP:8080/v1/o/ORG_NAME

    この形式のコマンドでは、アクセス トークンの有効期限が切れると、更新トークンの有効期限が切れるまで自動的に更新されます。

(SAML のみ)更新トークンの有効期限が切れると、get_token から新しいパスコードの入力を求められます。新しい OAuth アクセス トークンを生成する前に、上記の手順 3 に示されている URL に移動して、新しいパスコードを生成する必要があります。

Management API を使用してトークンを取得、更新する

Apigee Edge Management API で OAuth2 セキュリティを使用するでは、Edge Management API を使用してトークンを取得および更新トークンする方法について説明しています。Edge API 呼び出しを使用して、SAML アサーションから生成されたトークンを取得することもできます。

Apigee Edge Management API での OAuth2 セキュリティの使用に記載されている API 呼び出しとの唯一の違いは、呼び出しの URL でゾーン名を参照する必要があることです。また、SAML IDP で初期アクセス トークンを生成するには、上記の手順のステップ 3 に示すように、パスコードを含める必要があります。

認可のために、予約済みの OAuth2 クライアント認証情報を Authorization ヘッダーで渡します。この呼び出しにより、アクセス トークンと更新トークンが画面に出力されます。

アクセス トークンを取得する

(LDAP)次の API 呼び出しを使用して、初期アクセス トークンと更新トークンを生成します。

curl -H "Content-Type: application/x-www-form-urlencoded;charset=utf-8" \
  -H "accept: application/json;charset=utf-8" \
  -H "Authorization: Basic ZWRnZWNsaTplZGdlY2xpc2VjcmV0" -X POST \
  http://EDGE_SSO_IP_DNS:9099/oauth/token -s \
  -d 'grant_type=password&username=USER_EMAIL&password=USER_PASSWORD'

(SAML)次の API 呼び出しを使用して、初期アクセス トークンと更新トークンを生成します。

curl -H "Content-Type: application/x-www-form-urlencoded;charset=utf-8" \
  -H "accept: application/json;charset=utf-8" \
  -H "Authorization: Basic ZWRnZWNsaTplZGdlY2xpc2VjcmV0" -X POST \
  https://EDGE_SSO_IP_DNS:9099/oauth/token -s \
  -d 'grant_type=password&response_type=token&passcode=PASSCODE'

SAML IDP での認証には一時的なパスコードが必要ですが、LDAP IDP では必要ありません。

アクセス トークンを更新する

後でアクセス トークンを更新するには、更新トークンを含む次の呼び出しを使用します。

curl -H "Content-Type:application/x-www-form-urlencoded;charset=utf-8" \
  -H "Accept: application/json;charset=utf-8" \
  -H "Authorization: Basic ZWRnZWNsaTplZGdlY2xpc2VjcmV0" -X POST \
  https://EDGE_SSO_IP_DNS:9099/oauth/token \
  -d 'grant_type=refresh_token&refresh_token=REFRESH_TOKEN'