ローカル開発アクセストークン

AEM as a Cloud Serviceにプログラム的にアクセスする必要がある統合を構築する開発者は、ローカル開発アクティビティを容易にするために、AEMの一時的なアクセストークンを簡単かつ迅速に取得する必要があります。 このニーズを満たすために、AEM開発者コンソールを使用して、AEMにプログラム的にアクセスするために使用できる一時的なアクセストークンを自己生成できます。

ローカル開発アクセストークンの生成

ローカル開発アクセストークンの取得

ローカル開発アクセストークンを使用すると、トークンを生成したユーザーとしての AEM オーサーサービスおよびパブリッシュサービスへのアクセス権と、その権限を提供できます。 これは開発トークンですが、このトークンを共有しないでください。または、ソース管理下に保存してください。

  1. In AdobeAdminConsole 開発者は、次のメンバーであることを確認します。
    • Cloud Manager — 開発者 IMS 製品プロファイル (AEM Developer Console へのアクセス権を付与 )
    • 次のいずれか AEM Administrators または AEM Users アクセストークンが統合されるAEM環境のサービス用の IMS 製品プロファイル
    • サンドボックスAEMas a Cloud Service環境は、どちらかのメンバーシップのみが必要です AEM Administrators または AEM Users 製品プロファイル
  2. にログインします。 AdobeCloud Manager
  3. 統合するAEMas a Cloud Service環境を含むプログラムを開きます。
  4. 次をタップします。 省略記号 の環境の隣に 環境 セクションを選択し、 開発者コンソール
  5. 次の 統合 タブ
  6. タップ ローカル開発トークンを取得 ボタン
  7. をタップします。 ダウンロードボタン 左上隅に、 accessToken の値を指定して、JSON ファイルを開発マシン上の安全な場所に保存します。
    • これは、AEMas a Cloud Service環境への 24 時間の開発者アクセストークンです。

AEM Developer Console — 統合 —ローカル開発トークンの取得

ローカル開発アクセストークンを使用

ローカル開発アクセストークン — 外部アプリケーション

  1. AEM Developer Console から一時的なローカル開発アクセストークンをダウンロードします。
    • ローカル開発のアクセストークンは 24 時間ごとに期限が切れるので、開発者は新しいアクセストークンを毎日ダウンロードする必要があります
  2. AEM as a Cloud Serviceとプログラム的にやり取りする外部アプリケーションが開発中です
  3. 外部アプリケーションがアクセストークンをローカル開発で読み取る
  4. 外部アプリケーションは、AEMas a Cloud Serviceに対する HTTP リクエストを作成し、ローカル開発アクセストークンを Bearer トークンとして HTTP リクエストの Authorization ヘッダーに追加します。
  5. AEM as a Cloud Serviceは、HTTP リクエストを受信し、リクエストを認証し、HTTP リクエストによってリクエストされた作業を実行し、HTTP レスポンスを外部アプリケーションに返します

サンプル外部アプリケーション

簡単な外部 JavaScript アプリケーションを作成し、ローカル開発者アクセストークンを使用して、HTTPS 経由でas a Cloud Serviceにプログラム的にアクセスする方法を説明します。 これは、次の方法を示します。 任意 AEM以外で実行されるアプリケーションまたはシステムは、フレームワークや言語に関係なく、アクセストークンを使用して、AEM as a Cloud Serviceに対するプログラム認証とアクセスを行うことができます。 内 次のセクション 実稼動用のトークンを生成する方法をサポートするために、このアプリケーションコードを更新します。

このサンプルアプリケーションはコマンドラインから実行され、次のフローを使用して、AEM Assets HTTP API を使用してAEMのアセットメタデータを更新します。

  1. コマンドラインからパラメータを読み込みます (getCommandLineParams())
  2. AEMas a Cloud Service(getAccessToken(...))
  3. コマンドラインパラメーター (listAssetsByFolder(...))
  4. リストされているアセットのメタデータを、コマンドラインパラメーター (updateMetadata(...))

アクセストークンを使用してAEMをプログラムで認証する際のキー要素は、次の形式で、AEMに対しておこなわれたすべての HTTP リクエストに Authorization HTTP リクエストヘッダーを追加します。

  • Authorization: Bearer ACCESS_TOKEN

外部アプリケーションの実行

  1. 以下を確認します。 Node.js は、外部ローカル開発の実行に使用される、アプリケーションマシンにインストールされています

  2. をダウンロードして展開します。 サンプル外部アプリケーション

  3. コマンドラインから、このプロジェクトのフォルダでを実行します。 npm install

  4. ダウンロードしたローカル開発アクセストークン 次の名前のファイルに local_development_token.json プロジェクトのルートにある

    • ただし、Git に認証情報をコミットしないでください。
  5. 開く index.js 外部アプリケーションのコードとコメントを確認します。

    const fetch = require('node-fetch');
    const fs = require('fs');
    const auth = require('@adobe/jwt-auth');
    
    // The root context of the Assets HTTP API
    const ASSETS_HTTP_API = '/api/assets';
    
    // Command line parameters
    let params = { };
    
    /**
    * Application entry point function
    */
    (async () => {
        console.log('Example usage: node index.js aem=https://author-p1234-e5678.adobeaemcloud.com propertyName=metadata/dc:rights "propertyValue=WKND Limited Use" folder=/wknd/en/adventures/napa-wine-tasting file=credentials-file.json' );
    
        // Parse the command line parameters
        params = getCommandLineParams();
    
        // Set the access token to be used in the HTTP requests to be local development access token
        params.accessToken = await getAccessToken(params.developerConsoleCredentials);
    
        // Get a list of all the assets in the specified assets folder
        let assets = await listAssetsByFolder(params.folder);
    
        // For each asset, update it's metadata
        await assets.forEach(asset => updateMetadata(asset, {
            [params.propertyName]: params.propertyValue
        }));
    })();
    
    /**
    * Returns a list of Assets HTTP API asset URLs that reference the assets in the specified folder.
    *
    * https://experienceleague.adobe.com/docs/experience-manager-cloud-service/assets/admin/mac-api-assets.html?lang=ja#retrieve-a-folder-listing
    *
    * @param {*} folder the Assets HTTP API folder path (less the /content/dam path prefix)
    */
    async function listAssetsByFolder(folder) {
        return fetch(`${params.aem}${ASSETS_HTTP_API}${folder}.json`, {
                method: 'get',
                headers: {
                    'Content-Type': 'application/json',
                    'Authorization': 'Bearer ' + params.accessToken // Provide the AEM access token in the Authorization header
                },
            })
            .then(res => {
                console.log(`${res.status} - ${res.statusText} @ ${params.aem}${ASSETS_HTTP_API}${folder}.json`);
    
                // If success, return the JSON listing assets, otherwise return empty results
                return res.status === 200 ? res.json() : { entities: [] };
            })
            .then(json => {
                // Returns a list of all URIs for each non-content fragment asset in the folder
                return json.entities
                    .filter((entity) => entity['class'].indexOf('asset/asset') === -1 && !entity.properties.contentFragment)
                    .map(asset => asset.links.find(link => link.rel.find(r => r === 'self')).href);
            });
    }
    
    /**
    * Update the metadata of an asset in AEM
    *
    * https://experienceleague.adobe.com/docs/experience-manager-cloud-service/assets/admin/mac-api-assets.html?lang=ja#update-asset-metadata
    *
    * @param {*} asset the Assets HTTP API asset URL to update
    * @param {*} metadata the metadata to update the asset with
    */
    async function updateMetadata(asset, metadata) {
        await fetch(`${asset}`, {
                method: 'put',
                headers: {
                    'Content-Type': 'application/json',
                    'Authorization': 'Bearer ' + params.accessToken // Provide the AEM access token in the Authorization header
                },
                body: JSON.stringify({
                    class: 'asset',
                    properties: metadata
                })
            })
            .then(res => {
                console.log(`${res.status} - ${res.statusText} @ ${asset}`);
            });
    }
    
    /**
    * Parse and return the command line parameters. Expected params are:
    *
    * - aem = The AEM as a Cloud Service hostname to connect to.
    *              Example: https://author-p12345-e67890.adobeaemcloud.com
    * - folder = The asset folder to update assets in. Note that the Assets HTTP API do NOT use the JCR `/content/dam` path prefix.
    *              Example: '/wknd/en/adventures/napa-wine-tasting'
    * - propertyName = The asset property name to update. Note this is relative to the [dam:Asset]/jcr:content node of the asset.
    *              Example: metadata/dc:rights
    * - propertyValue = The value to update the asset property (specified by propertyName) with.
    *              Example: "WKND Free Use"
    * - file = The path to the JSON file that contains the credentials downloaded from AEM Developer Console
    *              Example: local_development_token_cm_p1234-e5678.json
    */
    function getCommandLineParams() {
        let parameters = {};
    
        // Parse the command line params, splitting on the = delimiter
        for (let i = 2; i < process.argv.length; i++) {
            let key = process.argv[i].split('=')[0];
            let value = process.argv[i].split('=')[1];
    
            parameters[key] = value;
        };
    
        // Read in the credentials from the provided JSON file
        if (parameters.file) {
            parameters.developerConsoleCredentials = JSON.parse(fs.readFileSync(parameters.file));
        }
    
        console.log(parameters);
    
        return parameters;
    }
    
    async function getAccessToken(developerConsoleCredentials) {s
        if (developerConsoleCredentials.accessToken) {
            // This is a Local Development access token
            return developerConsoleCredentials.accessToken;
        }
    }
    

    以下を確認します。 fetch(..) の呼び出し listAssetsByFolder(...) および updateMetadata(...)、および headers を定義します。 Authorization 値がの HTTP リクエストヘッダー Bearer ACCESS_TOKEN. 外部アプリケーションからの HTTP リクエストは、AEM as a Cloud Serviceに対してどのように認証されます。

    ...
    return fetch(`${params.aem}${ASSETS_HTTP_API}${folder}.json`, {
                method: 'get',
                headers: {
                    'Content-Type': 'application/json',
                    'Authorization': 'Bearer ' + params.accessToken // Provide the AEM access token in the Authorization header
                },
    })...
    

    AEM as a Cloud Serviceへの HTTP リクエストは、Authorization ヘッダーに Bearer アクセストークンを設定する必要があります。 各AEMas a Cloud Service環境には、独自のアクセストークンが必要です。 開発のアクセストークンはステージまたは実稼動では機能せず、ステージのアクセストークンは開発または実稼動では機能せず、実稼動は開発またはステージでは機能しません。

  6. コマンドラインを使用して、プロジェクトのルートからアプリケーションを実行し、次のパラメーターを渡します。

    $ node index.js \
        aem=https://author-p1234-e5678.adobeaemcloud.com \
        folder=/wknd/en/adventures/napa-wine-tasting \
        propertyName=metadata/dc:rights \
        propertyValue="WKND Limited Use" \
        file=local_development_token.json
    

    次のパラメーターが渡されます。

    • aem:アプリケーションがやり取りするAEMas a Cloud Service環境のスキームとホスト名 ( 例: https://author-p1234-e5678.adobeaemcloud.com) をクリックします。
    • folder:アセットが propertyValue;追加しない /content/dam プレフィックス ( 例: /wknd/en/adventures/napa-wine-tasting)
    • propertyName:更新するアセットプロパティの名前(相対的な名前) [dam:Asset]/jcr:content ( 例: metadata/dc:rights) をクリックします。
    • propertyValue:設定する値 propertyName からスペースを含む値は、 " ( 例: "WKND Limited Use")
    • file:AEM Developer Console からダウンロードした JSON ファイルの相対ファイルパス。

    更新された各アセットのアプリケーション結果出力が正常に実行された場合:

    200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting.json
    200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
    200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
    200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
    200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
    

AEMでのメタデータの更新の検証

AEM as a Cloud Service環境にログインして、メタデータが更新されていることを確認します ( 同じホストが aem コマンドラインパラメータにアクセスします )。

  1. 外部アプリケーションがやり取りするAEMas a Cloud Service環境にログインします ( aem コマンドラインパラメータ )
  2. 次に移動: Assets > ファイル
  3. これにより、 folder コマンドラインパラメータ(例: ) WKND > 英語 > 冒険 > ナパワインの試飲会
  4. を開きます。 プロパティ フォルダー内の(コンテンツフラグメント以外の)アセット
  5. をタップして、 詳細 タブ
  6. 更新されたプロパティの値を確認します(例: )。 著作権 更新された metadata/dc:rights JCR プロパティ。 propertyValue パラメーター、例: WKND 制限付き使用

WKND 制限付きメタデータ更新を使用

次の手順

ローカル開発トークンを使用してAEMas a Cloud Serviceにプログラム的にアクセスしたので、サービス資格情報を使用して処理するようにアプリケーションを更新し、実稼働コンテキストで使用できるようにする必要があります。

このページ