サーバーサイド API 用のアクセストークンの生成 generating-access-tokens-for-server-side-apis

一部のアーキテクチャでは、AEM インフラストラクチャの外部にあるサーバーにホストされているアプリケーションから AEM as a Cloud Service への呼び出しの実行がベースになっています。 例えば、モバイルアプリケーションがサーバーを呼び出し、その後、サーバーが AEM as a Cloud Service に対して API リクエストを行います。

サーバー間フローと簡略化した開発フローを以下に示します。 認証プロセスに必要なトークンの生成には、AEM as a Cloud Service 開発者コンソールを使用します。

サーバー間フロー the-server-to-server-flow

IMS 組織管理者の役割を持つユーザーおよび AEM オーサー上の AEM ユーザーまたは AEM 管理者製品プロファイルのメンバーであるユーザーは、AEM as a Cloud Service から一連の資格情報を生成できます。 各資格情報は、証明書(公開鍵)、秘密鍵および clientIdclientSecret で構成されるテクニカルアカウントを含む JSON ペイロードです。 これらの資格情報は後で、AEM as a Cloud Service 環境管理者の役割を持つユーザーによって取得され、AEM 以外のサーバーにインストールされることになるので、秘密鍵として慎重に取り扱う必要があります。 この JSON 形式のファイルには、AEM as a Cloud Service API との統合に必要なすべてのデータが含まれています。 このデータを使用して、署名済み JWT トークンを作成します。このトークンは、Adobe IMS(Identity Management Services)との間で IMS アクセストークンと交換されます。 その後、このアクセストークンをベアラー認証トークンとして使用して、AEM as a Cloud Service にリクエストを行うことができます。 資格情報の証明書はデフォルトで 1 年後に期限切れになりますが、必要に応じて更新できます。資格情報の更新を参照してください。

サーバー間フローは次のステップで構成されます。

  • Developer Console から AEM as a Cloud Service の資格情報を取得する
  • AEM を呼び出す AEM 以外のサーバーに AEM as a Cloud Service の資格情報をインストールする
  • JWT トークンを生成し、そのトークンをアドビの IMS API を使用してアクセストークンと交換する
  • アクセストークンをベアラー認証トークンに使用して AEM API を呼び出す
  • AEM 環境のテクニカルアカウントユーザーに適切な権限を設定する

AEM as a Cloud Service 資格情報の取得 fetch-the-aem-as-a-cloud-service-credentials

AEM as a Cloud Service の Developer Console にアクセスできるユーザーには、特定の環境の Developer Console の統合タブと 2 つのボタンが表示されます。 AEM as a Cloud Service 環境管理者の役割を持つユーザーは、「サービス資格情報を生成」ボタンをクリックして、サービス資格情報の JSON を生成して表示できます。 JSON には、選択したポッドにかかわらず、環境のオーサー層とパブリッシュ層用のクライアント ID、クライアント秘密鍵、秘密鍵、証明書、設定を含む、AEM 以外のサーバーに必要なすべての情報が含まれています。

JWT の生成

生成された後、ハンバーガーメニューをクリックして資格情報を取得し、資格情報の「表示」をクリックします。
JWT の生成

次のような出力が得られます。
JWT の生成

「クリップボードにコピー」ボタンを使用して、jsonをクリップボードにコピーし、ファイルに保存できます。 ファイルは秘密鍵として扱われ、安全に保存されるべきです。

NOTE
顧客は、テクニカルアカウントを最大 10 個まで作成できます(既に削除されているテクニカルアカウントを含む)。
IMPORTANT
AEM オーサーの AEM ユーザーまたは AEM 管理者製品プロファイルのメンバーでもある IMS 組織管理者(通常は Cloud Manager を通じて環境をプロビジョニングした同じユーザー)は、まず Developer Console にアクセスする必要があります。 次に、「新しいテクニカルアカウントを作成」をクリックして認証情報を生成し、AEM as a Cloud Service 環境に対する管理者権限を持つユーザーが取得します。 IMS 組織管理者がテクニカルアカウントをまだ作成していない場合は、IMS 組織管理者の役割が必要であることを示すメッセージが表示されます。

AEM サーバー以外での AEM サービス資格情報のインストール install-the-aem-service-credentials-on-a-non-aem-server

AEM を呼び出すアプリケーションは、AEM as a Cloud Service 資格情報にアクセスでき、それをシークレットとして扱うことができます。

JWT トークンを生成してアクセストークンと交換する generate-a-jwt-token-and-exchange-it-for-an-access-token

資格情報を使用して、Adobe IMS サービスへの呼び出しで JWT トークンを作成し、24 時間有効なアクセストークンを取得します。

AEM CS サービス認証情報は、この目的のために設計されたコードサンプルを使用して、アクセストークンと交換される場合があります。 サンプルコードは、Adobeのパブリック GitHub リポジトリ ​から入手できます。このリポジトリには、独自のプロジェクトにコピーして適用できるコード例が含まれています。 このリポジトリには参照用のサンプルコードが含まれており、実稼動用のライブラリ依存関係として維持されていないことに注意してください。

/*jshint node:true */
"use strict";

const fs = require('fs');
// Sample code adapted from Adobe's GitHub repository
const exchange = require("./your-local-aemcs-client"); // Copy and adapt the code from the GitHub repository

const jsonfile = "aemcs-service-credentials.json";

var config = JSON.parse(fs.readFileSync(jsonfile, 'utf8'));
exchange(config).then(accessToken => {
    // output the access token in json form including when it will expire.
    console.log(JSON.stringify(accessToken,null,2));
}).catch(e => {
    console.log("Failed to exchange for access token ",e);
});

同じ交換は、正しい形式の署名済み JWT トークンの生成と IMS トークン交換 API の呼び出しが可能な任意の言語で実行できます。

アクセストークンは有効期限を定義します(通常は 24 時間)。 Git リポジトリには、アクセストークンを管理して期限切れの前に更新するサンプルコードが含まれています。

NOTE
複数の資格情報がある場合は、後で呼び出される AEM への API 呼び出しに適した JSON ファイルを必ず参照してください。

AEM API の呼び出し calling-the-aem-api

ヘッダーにアクセストークンを含めて、AEM as a Cloud Service 環境に対して適切なサーバー間 API 呼び出しを行います。 そのため、「Authorization」ヘッダーには "Bearer <access_token>" の値を使用します。 例えば、curl を使用して次のように呼び出します。

curl -H "Authorization: Bearer <your_ims_access_token>" https://author-p123123-e23423423.adobeaemcloud.com/content/dam.json

AEM のテクニカルアカウントユーザーに対する適切な権限の設定 set-the-appropriate-permissions-for-the-technical-account-user-in-aem

まず、新しい製品プロファイルを Adobe Admin Console で作成する必要があります。

  1. Adobe Admin Console(https://adminconsole.adobe.com/)に移動します。

  2. 左側の​ 製品とサービス ​列の下にある​ 管理 ​リンクをクリックします。

  3. AEM as a Cloud Service を選択します。

  4. 新しいプロファイル」ボタンを押します。

    新しいプロファイル

  5. プロファイルに名前を付け、「保存」を押します。

    プロファイルを保存

  6. プロファイルリストから作成したプロファイルを選択します。

  7. ユーザーを追加」を選択します。

    ユーザーを追加

  8. 作成したテクニカルアカウント(この場合は 84b2c3a2-d60a-40dc-84cb-e16b786c1673@techacct.adobe.com)を追加し、「保存」をクリックします。

    テクニカルアカウントの追加

  9. 変更が反映されるまで 10 分間待ち、新しい資格情報から生成されたアクセストークンを使用して AEM への API 呼び出しを行います。 cURL コマンドの場合、次の例のようになります。

    curl -H "Authorization: Bearer <access_token>" https://author-pXXXXX-eXXXXX.adobeaemcloud.net/content/dam.json

API を呼び出した後、製品プロファイルが AEM as a Cloud Service のオーサーインスタンスにユーザーグループとして表示され、適切なテクニカルアカウントがそのグループのメンバーとして表示されます。

この情報を確認するには、次の手順を実行します。

  1. オーサーインスタンスにログオンします。

  2. ツールセキュリティ​に移動し、グループ​カードをクリックします。

  3. グループのリストで作成したプロファイルの名前を見つけて、クリックします。

    グループプロファイル

  4. 次のウィンドウで、「メンバー」タブに切り替えて、テクニカルアカウントが正しく一覧表示されているかどうかを確認します。

    「メンバー」タブ

または、オーサーインスタンスで次の手順を実行して、テクニカルアカウントがユーザーリストに表示されることを確認することもできます。

  1. ツールセキュリティユーザー​に移動します。

  2. お使いのテクニカルアカウントがユーザーリストにあることを確認し、選択します。

  3. グループ」タブをクリックして、ユーザーが製品プロファイルに対応するグループに属していることを確認します。 また、このユーザーは、投稿者を含む一部の他のグループのメンバーでもあります。

    グループのメンバーシップ

NOTE
2023年半ば以前は、複数の資格情報を作成できるようになる前であったため、顧客に対する Adobe Admin Console での製品プロファイルの作成に関するガイドはありませんでした。 したがって、テクニカルアカウントは AEM as a Cloud Service インスタンスの「投稿者」以外のグループに関連付けられていませんでした。 一貫性を保つため、このテクニカルアカウントの場合は、前述のように Adobe Admin Console で製品プロファイルを作成し、既存のテクニカルアカウントをそのグループに追加することをお勧めします。

適切なグループ権限を設定

最後に、必要な適切な権限でグループを設定して、適切に API を呼び出しまたはロックダウンします。

  1. 適切なオーサーインスタンスにログオンし、設定セキュリティ権限​に移動します。

  2. 左側のウィンドウで製品プロファイルに対応するグループの名前(この場合は読み取り専用 API)を検索し、選択します。

    グループの検索

  3. 次のウィンドウで「編集」ボタンをクリックします。

    権限を編集

  4. 権限を適切に変更し、「保存」をクリックします

    権限の編集の確認

INFO
Adobe Identity Management System(IMS)と AEM ユーザーおよびグループについて詳しくは、ドキュメントを参照してください。 詳しくは、ドキュメントを参照してください。

開発者フロー developer-flow

開発者は、AEM as a Cloud Service 開発環境に対してリクエストを行う AEM 以外のアプリケーションの開発インスタンス(ノート PC 上で動作するか、またはホストされている)を使用してテストを行います。 ただし、開発者は必ずしも IMS 管理者役割の権限を持ってはいないので、アドビは通常のサーバー間フローで説明されている JWT ベアラーを開発者が生成できるとは想定できません。 したがって、アドビでは、アクセスできる AEM as a Cloud Service での環境へのリクエストで使用できるアクセストークンを開発者が直接生成するメカニズムが用意されています。

AEM as a Cloud Service 開発者コンソールの使用に必要な権限については、開発者ガイドラインドキュメントを参照してください。

NOTE
ローカル開発アクセストークンは最大 24 時間有効で、その後は同じ方法で再生成する必要があります。

開発者は、このトークンを使用して AEM 以外のテストアプリケーションから AEM as a Cloud Service 環境に呼び出しを行うことができます。 一般的に、開発者は自分のノート PC で動作する AEM 以外のアプリケーションでこのトークンを使用します。 また、AEM as a Cloud Service は通常、非本番環境です。

開発者フローは次のステップで構成されます。

  • 開発者コンソールからアクセストークンを生成する
  • そのアクセストークンを指定して AEM アプリケーションを呼び出す

また、開発者は、ローカルマシン上で動作している AEM プロジェクトに対して API 呼び出しを行うこともできます。この場合、アクセストークンは不要です。

アクセストークンの生成 generating-the-access-token

  1. 統合​の下の​ ローカルトークン ​に移動します
  2. Developer Consoleで「ローカル開発トークンを取得」をクリックすると、アクセストークンを生成できます。

アクセストークンを使用した AEM アプリケーションの呼び出し call-the-aem-application-with-an-access-token

ヘッダーにアクセストークンを含めて、AEM 以外のアプリケーションから AEM as a Cloud Service 環境に対して適切なサーバー間 API 呼び出しを行います。 そのため、「Authorization」ヘッダーには "Bearer <access_token>" の値を使用します。

資格情報の更新 refresh-credentials

デフォルトでは、AEM as a Cloud Service の資格情報は 1 年後に期限切れになります。 サービスの継続性を確保するために、開発者は資格情報を更新して、利用期間をさらに 1 年間延長することができます。

この更新拡張機能を実行するには、次の操作を実行します。

  • 以下に示すように、開発者コンソールの​統合テクニカルアカウント​の下の「証明書を追加」ボタンを使用します

    資格情報の更新

  • ボタンを押すと、新しい証明書を含む一連の資格情報が生成されます。 古い資格情報を削除せずに、AEM 以外のサーバーに新しい資格情報をインストールし、接続が期待どおりに動作することを確認します。

  • アクセストークンを生成する際に、古い資格情報ではなく新しい資格情報が使用されていることを確認します。

資格情報の失効 credentials-revocation

秘密鍵が侵害された場合は、新しい証明書と新しい秘密鍵で資格情報を作成する必要があります。 アプリケーションが新しい資格情報を使用してアクセストークンを生成した後、次の手順を実行して、古い証明書を失効および削除できます。

  1. まず、新しいキーを追加します。 これにより、新しい秘密鍵および新しい証明書を使用して、資格情報が生成されます。 新しい秘密鍵は、ユーザーインターフェイスで​ 現在 ​とマークされ、今後このテクニカルアカウントでのすべての新しい資格情報に使用されます。 古い秘密鍵に関連付けられている資格情報は、失効されるまで有効です。 この失効を実現するには、3つのドット ()を選択します 現在のテクニカルアカウントで、新しい秘密鍵を追加​を選択します。

    新しい秘密鍵を追加

  2. 新しい資格情報を含む新しい参照タブが開き、ユーザーインターフェイスが更新されて秘密鍵が両方とも表示されます。新しい秘密鍵は​ 現在 ​としてマークされます。

    UI の秘密鍵

  3. 非 AEM サーバーに新しい資格情報をインストールし、接続が期待どおりに動作することを確認します。 詳しくは、サーバー間のフローセクションを参照してください。

  4. 3つのドット ()を選択して、古い証明書を失効させます 証明書の右側で、失効​を選択します。

    証明書の失効

    次に、失効​ボタンを押して、次のプロンプトで失効を確認します。

    証明書の確認の失効

  5. 最後に、問題が発生した証明書を削除します。

個人証明書の失効に関する注意 note-on-recovacting-individual-certificates

JWT ハンドシェイク(ベアラートークンの取得に使用)の場合、次の条件を満たす必要があります。

  1. その秘密鍵があります
  2. Developer Consoleのそれぞれの秘密鍵の下に1つ以上のアクティブな証明書が存在します
  3. トークン(JWT ハンドシェイク)の取得中に、IMSはJWT署名が、コンソールに表示されるシステムのレコード上のバインド済みおよびアクティブな(期限切れでない)証明書と一致することを確認します。

PKの下に新しい証明書を追加すると、失効した証明書が引き続き使用できる場合があります。 実際には、PKの下のすべての証明書は同等です。 1つがアクティブな場合、すべてがアクティブとみなされます。

これがセキュリティ上の問題であると考えられる場合は、別の秘密鍵を作成し、古い秘密鍵のすべての証明書を取り消す必要があります。

recommendation-more-help
experience-manager-cloud-service-help-main-toc