Edge Management API での SAML の使用

Edge for Private Cloud v4.19.01

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

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

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

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

SAML を有効にした後、必要に応じて基本認証を無効にできます。基本認証を無効にすると、基本認証をサポートする Edge Management API 呼び出しに依存するすべてのスクリプト(Maven スクリプト、シェル スクリプト、apigeetool など)が機能しなくなります。基本認証を使用する API 呼び出しとスクリプトを更新して、Bearer ヘッダーで 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. get_token を /usr/local/bin にインストールします。
    > ./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 ポート番号を使用します。

    注: 現在、ID プロバイダでログインしていない場合は、ログインを求められます。

    この 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. アクセス トークンを Bearer ヘッダーとして 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 を使用してトークンを取得および更新トークンを更新する方法が記載されています。SAML アサーションから生成されたトークンに対して Edge API 呼び出しを使用することもできます。

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'