マシンユーザーを使用してタスクを自動化する

Edge API で外部 IDP を使用する場合、CLI から OIDC/OAuth2 アクセス トークンを取得する標準プロセスは、OAuth 2.0 デバイスコードフローです。このフローでは、get_token ユーティリティを使用して、ブラウザで URL にアクセスして IDP 経由で認証を行うと、ターミナルが自動的にブロック解除されます。

ただし、開発環境では、一般的な開発タスクの自動化がサポートされている場合があります。 テストの自動化や CI/CD パイプラインなど。外部 IDP が有効になっているときにこれらのタスクを自動化するには、 ブラウザ操作を必要とせずに、OAuth2 トークンをヘッドレスで取得して更新する方法が必要です。

Edge では、ヘッドレス マシンユーザーを使用してトークンを自動生成できます。マシンユーザーは、ブラウザを必要とせずに、標準のパスワード付与によって OIDC/OAuth2 トークンを取得できます。つまり、スクリプトのトークンの取得と更新トークンの更新のプロセスを完全に自動化できます。

マシンユーザーを作成する

すべての組織で使用されるマシンユーザーを作成することも、組織ごとに個別のマシンユーザーを作成することもできます。

マシンユーザーは、ローカルの OpenLDAP ディレクトリに直接作成されて保存され、マシンユーザーとして明示的にタグ付けされます(employeeType: machineuser)。これにより、人間のユーザーに対してフェデレーション SAML/OIDC が厳格に適用されている場合でも、Apigee SSO はパスワード付与によってマシンユーザーを安全に認証できます。

マシンユーザーの作成、一覧表示、管理の詳細については、apigee-machineuser.sh でマシンユーザーを管理するをご覧ください。

マシンユーザー トークンを取得して更新する

マシンユーザーのトークンを取得するには、/opt/apigee/apigee-openldap/bin/ に用意されている get_token ユーティリティと acurl ユーティリティ、または標準の curl を使用できます。

  • Apigee ユーティリティを使用する: get_token ラッパーと acurl ラッパーは、トークンのキャッシュ、ペイロードの生成、自動更新を自動的に処理します。これらのツールの使用方法の詳細と例については、get_token ユーティリティと acurl ユーティリティを使用するをご覧ください。
  • 標準の curl を使用する: 自動化スクリプトが Apigee ラッパーにアクセスできない場合は、次の標準の curl コマンドを使用して Apigee SSO と直接やり取りできます。

標準の curl を使用してトークンを取得して更新するには:

  1. 次の API 呼び出しを使用して、Apigee SSO から直接初期アクセス トークンと更新トークンを生成します。
    curl -H "Content-Type: application/x-www-form-urlencoded;charset=utf-8" \
      -H "accept: application/json;charset=utf-8" \
      -X POST http://Edge_SSO_IP_DNS:9099/token -s \
        -d 'grant_type=password&username=machineUserEmail&password=machineUserPassword&client_id=edgecli&client_secret=edgeclisecret&scope=openid%20profile%20email%20offline_access'
      
  2. アクセス トークンを Authorization: Bearer ヘッダーの Edge Management API 呼び出しに渡します。
    curl -H "Authorization: Bearer access_token" \
      http://MS_IP_DNS:8080/v1/organizations/org_name
  3. 後でアクセス トークンをネイティブに更新するには、更新トークンを含む次の呼び出しを使用します。
    curl -H "Content-Type:application/x-www-form-urlencoded;charset=utf-8" \
      -H "Accept: application/json;charset=utf-8" \
      -X POST http://Edge_SSO_IP_DNS:9099/token \
      -d 'grant_type=refresh_token&refresh_token=refreshToken&client_id=edgecli&client_secret=edgeclisecret'