外部 IDP のタスクを自動化する

Edge API で外部 IDP を使用する場合、IDP とやり取りして OAuth2 アクセス トークンと更新トークンを取得するプロセスのことを「パスコード フロー」と呼びます。パスコード フローでは、ブラウザを使用してワンタイム パスコードを取得し、それを使用して OAuth2 トークンを取得します。

ただし、開発環境では、テストの自動化や CI / CD などの一般的な開発タスクに対して自動化をサポートできます。外部 IDP が有効なときにこれらのタスクを自動化するには、ブラウザからパスコードをコピーして貼り付ける操作を介さずに OAuth2 トークンを取得および更新できる方法が必要です。

Edge には、IDP が有効にされた組織内のマシンユーザーを通じてトークンを自動生成する仕組みがあります。マシンユーザーは、パスコードを指定しなくても OAuth2 トークンを取得できます。つまり、Edge Management API を使用することで、OAuth2 トークンを取得および更新するプロセスを完全に自動化できます。

IDP が有効にされた組織に対してマシンユーザーを作成する方法は 2 通りあります。

以降のセクションで、それぞれの方法について説明します。

外部 IDP が有効にされていない組織に対しては、マシンユーザーは作成できません。

apigee-ssoadminapi.sh を使用してマシンユーザーを作成する

apigee-ssoadminapi.sh ユーティリティを使用して、IDP が有効にされた組織内でマシンユーザーを作成します。詳細については、apigee-ssoadminapi.sh の使用をご覧ください。すべての組織で使用するマシンユーザーをひとつだけ作成することも、組織ごとに別々のマシンユーザーを作成することもできます。

作成されたマシンユーザーは、IDP ではなく Edge データストアに保存されます。したがって、Edge UI と Edge Management API を使用してマシンユーザーを管理する必要はありません。

マシンユーザーを作成するとき、メールアドレスとパスワードを指定する必要があります。マシンユーザーを作成したら、それを 1 つ以上の組織に割り当てます。

apigee-ssoadminapi.sh を使用してマシンユーザーを作成するには:

  1. 次の apigee-ssoadminapi.sh コマンドを使用してマシンユーザーを作成します。
    apigee-ssoadminapi.sh saml machineuser add --admin SSO_ADMIN_NAME \
          --secret SSO_ADMIN_SECRET --host Edge_SSO_IP_or_DNS \
          -u machine_user_email -p machine_user_password

    質問 / TBD: apigee-ssoadminapi.sh の引数として "ldap" も使用できますか?

    ここで

    • SSO_ADMIN_NAME は、Apigee SSO モジュールの構成に使用した構成ファイル内の SSO_ADMIN_NAME プロパティで定義された管理者のユーザー名です。デフォルトは ssoadmin です。
    • SSO_ADMIN_SECRET は、構成ファイル内の SSO_ADMIN_SECRET プロパティで指定された管理者のパスワードです。

      この例では、--port--ssl の値は省略できます。apigee-sso モジュールは と --ssl に対してそれぞれデフォルト値の 9099 と http を使用するためです。これらのデフォルト値以外の設定を使用している場合は、適切な値を指定してください。

  2. Edge UI にログインしてマシンユーザーのメールアドレスを組織に追加し、マシンユーザーに必要な役割を割り当てます。詳細については、グローバル ユーザーの追加をご覧ください。

Edge Management API を使用してマシンユーザーを作成する

apigee-ssoadminapi.sh ユーティリティのほかに、Edge Management API を使用してマシンユーザーを作成することもできます。

Management API を使用してマシンユーザーを作成するには:

  1. 次の curl コマンドを使用して、ssoadmin ユーザー(apigee-sso の管理者アカウントのユーザー名)のトークンを取得します。
    curl "http://Edge_SSO_IP_DNS:9099/oauth/token" -i -X POST \
          -H 'Accept: application/json' / -H 'Content-Type: application/x-www-form-urlencoded' \
          -d "response_type=token" -d "grant_type=client_credentials" \
          --data-urlencode "client_secret=SSO_ADMIN_SECRET" \
          --data-urlencode "client_id=ssoadmin"

    ここで、SSO_ADMIN_SECRET は、apigee-sso のインストール時に構成ファイル内の SSO_ADMIN_SECRET プロパティで指定された管理者パスワードです。

    このコマンドを実行すると、次回の呼び出しに必要なトークンが表示されます。

  2. 次の curl コマンドを使用し、前のステップで受け取ったトークンを渡してマシンユーザーを作成します。
    curl "http://edge_sso_IP_DNS:9099/Users" -i -X POST \
          -H "Accept: application/json" -H "Content-Type: application/json" \
          -d '{"userName" : "machine_user_email", "name" :
            {"formatted":"DevOps", "familyName" : "last_name", "givenName" :
            "first_name"}, "emails" : [ {"value" :
            "machine_user_email", "primary" : true } ], "active" : true,
            "verified" : true, "password" : "machine_user_password" }' \
          -H "Authorization: Bearer token"

    マシンユーザーのパスワードは後のステップで必要になります。

  3. Edge UI にログインします。
  4. マシンユーザーのメールアドレスを組織に追加し、マシンユーザーに必要な役割を割り当てます。詳細については、グローバル ユーザーの追加をご覧ください。

マシンユーザーのトークンを取得および更新する

Edge API を使用して、マシンユーザーの資格情報をパスコードの代わりに渡すことで、OAuth2 トークンを取得して更新します。

マシンユーザーの OAuth2 トークンを取得するには:

  1. 次の 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=m_user_email&password=m_user_password'

    後で使用するためにトークンを保存します。

  2. 次の例のように、取得したアクセス トークンを Edge Management API の呼び出しに Bearer ヘッダーとして渡します。
    curl -H "Authorization: Bearer access_token" \
          http://MS_IP_DNS:8080/v1/organizations/org_name

    ここで、org_name はマシンユーザーを含む組織の名前です。

  3. 後でアクセス トークンを更新するには、更新トークンを含む次の呼び出しを使用します。
    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 \
          -d 'grant_type=refresh_token&refresh_token=refreshToken'