デフォルトでは、AEM は各リクエストの認証にトークン認証ハンドラーを使用します。ただし、認証リクエストに対応するために、トークン認証ハンドラーはリクエストごとにリポジトリにアクセスする必要があります。これは、認証の状態を維持するのに cookie が使用されるからです。理論上、後続のリクエストを検証するには、リポジトリに状態が保持される必要があります。要するに、認証メカニズムがステートフルであるということです。
これは、水平方向のスケーラビリティを確保するために特に重要です。以下のパブリッシュファームのようなマルチインスタンスの設定では、最適なロードバランシングは実現できません。ステートフル認証では、保持された認証状態はユーザーが最初に認証されたインスタンスでのみ使用できます。
次のシナリオを例として使用します。
ユーザーはパブリッシュインスタンス 1 で認証できますが、後続のリクエストがパブリッシュインスタンス 2 に送られても、状態はパブリッシュ 1 のリポジトリに保持されており、パブリッシュ 2 には独自のリポジトリがあるのでその保持された認証状態を持ちません。
これを解決するには、ロードバランサーレベルで定着接続を設定します。定着接続を使用すると、ユーザーは常に同じパブリッシュインスタンスに送られます。その結果、真に最適なロードバランシングは実現しません。
あるパブリッシュインスタンスが使用できなくなると、そのインスタンスで認証されているすべてのユーザーのセッションが失われます。これは、認証の cookie の検証にはリポジトリへのアクセスが必要なためです。
AEM の新しいカプセル化されたトークンサポートを使用したステートレス認証により、水平方向のスケーラビリティを確保できます。
カプセル化トークンは、AEMがリポジトリにアクセスすることなく、認証情報をオフラインで安全に作成し、検証できる暗号化の一部です。 この方法により、認証リクエストがすべてのパブリッシュインスタンスでおこなわれるようになるので、定着接続は不要です。また、認証リクエストごとにリポジトリにアクセスする必要がなくなるので、認証のパフォーマンスが向上するというメリットもあります。
MongoMK オーサーインスタンスと TarMK パブリッシュインスタンスによる地理的に分散したデプロイメントでこれがどのように機能するかを以下に示します。
カプセル化されたトークンは認証に使用されます。これにより、リポジトリにアクセスすることなく cookie を確実に検証できます。ただし、すべてのインスタンスにユーザーが存在し、そのユーザーの下に保存された情報にすべてのインスタンスがアクセスできる必要があります。
例えば、パブリッシュインスタンス 1 に新しく作成されたユーザーは、カプセル化されたトークンにより、パブリッシュインスタンス 2 でも正常に認証されます。ユーザーがパブリッシュインスタンス 2 に存在しない場合、リクエストは失敗します。
ユーザーを同期し、トークン認証(SAML や OAuth など)に依存するすべての認証ハンドラーは、カプセル化されたトークンでのみ機能します。
スティッキーセッションが有効になっている、または
同期の開始時に、AEMで既にユーザーが作成されています。 つまり、ハンドラーが 作成 ユーザーが同期処理を実行したとき。
カプセル化されたトークンを設定する際には、いくつかの点を考慮する必要があります。
HMAC キーがのバイナリプロパティとして存在する /etc/key
リポジトリ内に保存されます。 その横にある View リンクをクリックすることで別個にダウンロードできます。
インスタンス間で鍵をレプリケーションするには、次の手順に従います。
コピーする鍵要素を含む AEM インスタンス(通常はオーサーインスタンス)にアクセスします。
ローカルファイルシステム内で、com.adobe.granite.crypto.file
を見つけます。例えば、次のパスにあります。
各フォルダー内の bundle.info
ファイルは、バンドル名を示します。
データフォルダーに移動します。次に例を示します。
<author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
HMAC とマスターファイルをコピーします。
次に、HMAC 鍵の複製先となるターゲットインスタンスにアクセスし、データフォルダーに移動します。次に例を示します。
<publish-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
前の手順でコピーした 2 つのファイルを貼り付けます。
ターゲットインスタンスが既に実行されている場合は、Crypto バンドルを更新します。
鍵のレプリケーション先のすべてのインスタンスに対して上記の手順を繰り返します。
HMAC 鍵がレプリケートされたら、Web コンソールを介してカプセル化されたトークンを有効化できます。
https://serveraddress:port/system/console/configMgr