サーバーサイド 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 から一連の資格情報を生成できます。 各資格情報は、証明書(公開鍵)、秘密鍵および clientId と clientSecret で構成されるテクニカルアカウントを含む 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 以外のサーバーに必要なすべての情報が含まれています。
生成された後、ハンバーガーメニューをクリックして資格情報を取得し、資格情報の「表示」をクリックします。
次のような出力が得られます。
「クリップボードにコピー」ボタンを使用して、jsonをクリップボードにコピーし、ファイルに保存できます。 ファイルは秘密鍵として扱われ、安全に保存されるべきです。
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 リポジトリには、アクセストークンを管理して期限切れの前に更新するサンプルコードが含まれています。
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 で作成する必要があります。
-
Adobe Admin Console(https://adminconsole.adobe.com/)に移動します。
-
左側の 製品とサービス 列の下にある 管理 リンクをクリックします。
-
AEM as a Cloud Service を選択します。
-
「新しいプロファイル」ボタンを押します。
-
プロファイルに名前を付け、「保存」を押します。
-
プロファイルリストから作成したプロファイルを選択します。
-
「ユーザーを追加」を選択します。
-
作成したテクニカルアカウント(この場合は
84b2c3a2-d60a-40dc-84cb-e16b786c1673@techacct.adobe.com)を追加し、「保存」をクリックします。
-
変更が反映されるまで 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 のオーサーインスタンスにユーザーグループとして表示され、適切なテクニカルアカウントがそのグループのメンバーとして表示されます。
この情報を確認するには、次の手順を実行します。
-
オーサーインスタンスにログオンします。
-
ツール/セキュリティに移動し、グループカードをクリックします。
-
グループのリストで作成したプロファイルの名前を見つけて、クリックします。
-
次のウィンドウで、「メンバー」タブに切り替えて、テクニカルアカウントが正しく一覧表示されているかどうかを確認します。
または、オーサーインスタンスで次の手順を実行して、テクニカルアカウントがユーザーリストに表示されることを確認することもできます。
-
ツール/セキュリティ/ユーザーに移動します。
-
お使いのテクニカルアカウントがユーザーリストにあることを確認し、選択します。
-
「グループ」タブをクリックして、ユーザーが製品プロファイルに対応するグループに属していることを確認します。 また、このユーザーは、投稿者を含む一部の他のグループのメンバーでもあります。
適切なグループ権限を設定
最後に、必要な適切な権限でグループを設定して、適切に API を呼び出しまたはロックダウンします。
-
適切なオーサーインスタンスにログオンし、設定/セキュリティ/権限に移動します。
-
左側のウィンドウで製品プロファイルに対応するグループの名前(この場合は読み取り専用 API)を検索し、選択します。
-
次のウィンドウで「編集」ボタンをクリックします。
-
権限を適切に変更し、「保存」をクリックします
開発者フロー developer-flow
開発者は、AEM as a Cloud Service 開発環境に対してリクエストを行う AEM 以外のアプリケーションの開発インスタンス(ノート PC 上で動作するか、またはホストされている)を使用してテストを行います。 ただし、開発者は必ずしも IMS 管理者役割の権限を持ってはいないので、アドビは通常のサーバー間フローで説明されている JWT ベアラーを開発者が生成できるとは想定できません。 したがって、アドビでは、アクセスできる AEM as a Cloud Service での環境へのリクエストで使用できるアクセストークンを開発者が直接生成するメカニズムが用意されています。
AEM as a Cloud Service 開発者コンソールの使用に必要な権限については、開発者ガイドラインドキュメントを参照してください。
開発者は、このトークンを使用して AEM 以外のテストアプリケーションから AEM as a Cloud Service 環境に呼び出しを行うことができます。 一般的に、開発者は自分のノート PC で動作する AEM 以外のアプリケーションでこのトークンを使用します。 また、AEM as a Cloud Service は通常、非本番環境です。
開発者フローは次のステップで構成されます。
- 開発者コンソールからアクセストークンを生成する
- そのアクセストークンを指定して AEM アプリケーションを呼び出す
また、開発者は、ローカルマシン上で動作している AEM プロジェクトに対して API 呼び出しを行うこともできます。この場合、アクセストークンは不要です。
アクセストークンの生成 generating-the-access-token
- 統合の下の ローカルトークン に移動します
- 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
秘密鍵が侵害された場合は、新しい証明書と新しい秘密鍵で資格情報を作成する必要があります。 アプリケーションが新しい資格情報を使用してアクセストークンを生成した後、次の手順を実行して、古い証明書を失効および削除できます。
-
まず、新しいキーを追加します。 これにより、新しい秘密鍵および新しい証明書を使用して、資格情報が生成されます。 新しい秘密鍵は、ユーザーインターフェイスで 現在 とマークされ、今後このテクニカルアカウントでのすべての新しい資格情報に使用されます。 古い秘密鍵に関連付けられている資格情報は、失効されるまで有効です。 この失効を実現するには、3つのドット (…)を選択します 現在のテクニカルアカウントで、新しい秘密鍵を追加を選択します。
-
新しい資格情報を含む新しい参照タブが開き、ユーザーインターフェイスが更新されて秘密鍵が両方とも表示されます。新しい秘密鍵は 現在 としてマークされます。
-
非 AEM サーバーに新しい資格情報をインストールし、接続が期待どおりに動作することを確認します。 詳しくは、サーバー間のフローセクションを参照してください。
-
3つのドット (…)を選択して、古い証明書を失効させます 証明書の右側で、失効を選択します。
次に、失効ボタンを押して、次のプロンプトで失効を確認します。
-
最後に、問題が発生した証明書を削除します。
個人証明書の失効に関する注意 note-on-recovacting-individual-certificates
JWT ハンドシェイク(ベアラートークンの取得に使用)の場合、次の条件を満たす必要があります。
- その秘密鍵があります
- Developer Consoleのそれぞれの秘密鍵の下に1つ以上のアクティブな証明書が存在します
- トークン(JWT ハンドシェイク)の取得中に、IMSはJWT署名が、コンソールに表示されるシステムのレコード上のバインド済みおよびアクティブな(期限切れでない)証明書と一致することを確認します。
PKの下に新しい証明書を追加すると、失効した証明書が引き続き使用できる場合があります。 実際には、PKの下のすべての証明書は同等です。 1つがアクティブな場合、すべてがアクティブとみなされます。
これがセキュリティ上の問題であると考えられる場合は、別の秘密鍵を作成し、古い秘密鍵のすべての証明書を取り消す必要があります。