Edge Management API での SAML の使用

Edge for Private Cloud バージョン 4.17.09

Basic 認証は、Edge Management API を呼び出す際の認証方法の一つです。たとえば、次の cURL リクエストを Edge Management API に送信すると、組織に関する情報にアクセスできます。

curl -u userName:pWord https://ms_IP_DNS:8080/v1/organizations/orgName

この例では、cURL -u オプションを使用して Basic 認証認証情報を渡しています。別の方法として、OAuth2 トークンを Bearer ヘッダーで渡して、Edge Management API 呼び出しを行うこともできます。例:

curl -H "Authorization: Bearer <access_token>" https://ms_IP_DNS:8080/v1/organizations/orgName

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

get_token を使用したトークンの取得と更新

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

get_token ユーティリティはトークンをディスクに格納し、必要なときにすぐに使用できます。また、有効なアクセス トークンを stdout に出力します。そこから、Postman を使用するか、curl で使用する環境変数に埋め込みます。

次の手順では、get_token を使用して OAuth2 アクセス トークンを取得し、Edge Management API 呼び出しを行う方法について説明します。

  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 は Edge SSO モジュールをホストするマシンの DNS 名の IP アドレスです。Edge SSO で TLS を構成した場合は、https と正しい TLS ポート番号を使用します。

  2. ssocli-bundle.zip バンドルを解凍します。
    unzip ssocli-bundle.zip
  3. /usr/local/binget_token をインストールします。
    ./install

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

    ./install -b path
  4. SSO_LOGIN_URL 環境変数に次の形式を使用して、ログイン URL に設定します。
    export SSO_LOGIN_URL="http://edge_sso_IP_DNS:9099"

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

  5. ブラウザで、次の URL にアクセスしてワンタイム パスコードを取得します。
    http://edge_sso_IP_DNS:9099/passcode

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

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

  6. get_token を呼び出して OAuth2 アクセス トークンを取得します。
    get_token -u emailAddress

    ここで、emailAddress は Edge ユーザーのメールアドレスです。手順 3 で取得したワンタイム パスコードを入力するよう求められます。

    One Time Code ( Get one at https://edge_sso_IP.com/passcode )
          Enter the passcode if SAML is enabled or press ENTER:

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

    パスコードをコマンドラインで入力するには、次の形式の get_token コマンドを使用します。

    get_token -u emailAddress -p passcode

  7. アクセス トークンを署名なしヘッダーとして Edge Management API 呼び出しに渡します。
    curl -H "Authorization: Bearer access_token"
    https://ms_IP:8080/v1/organizations/orgName

    新しいアクセス トークンを初めて取得した後は、次のように、アクセス トークンを取得して 1 つのコマンドで API 呼び出しに渡すことができます。

    header=`get_token` &&
    curl -H "Authorization: Bearer $header"
    https://ms_IP:8080/v1/o/orgName

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

更新トークンの有効期限が切れると、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 でゾーン名を参照する必要があることです。また、初期アクセス トークンを生成するには、上記の手順のステップ 3 に示すように、パスコードを含める必要があります。

たとえば、初期アクセス トークンと更新トークンを生成するには、次の 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'

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

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

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=refreshToken'