OAuth サーバー間認証を使用したAEM Forms Communications API の呼び出し

このガイドでは、OAuth サーバー間認証を使用してAdobe Developer Consoleを通じてアクセスされるAEM Forms Communications Synchronous API を設定および呼び出す手順について説明します。

前提条件

AEM Forms Communications API の実行とテストを行うための環境を設定するには、以下が揃っていることを確認してください。

AEM as a Cloud Service環境の更新

アクセスと権限

通信 API の設定を開始する前に、必要なアクセス権と権限があることを確認してください。

ユーザーおよび役割の権限

  • Adobe Admin Consoleで割り当てられた開発者の役割
  • Adobe Developer Consoleでプロジェクトを作成する権限
NOTE
役割の割り当ておよびユーザーへのアクセス権の付与について詳しくは、記事 ​ ユーザーと役割の追加 ​ を参照してください。

Git リポジトリへのアクセス

  • Cloud Manager Git リポジトリーへのアクセス
  • クローン作成と変更のプッシュのための Git 資格情報
NOTE
Adobe Cloud ManagerとAdobe Cloud Managerの統合方法について詳しくは、Git 統合に関するドキュメント ​ を参照してください。

Adobe Developer Console(ADC)を使用したアクセストークンの生成

  • OAuth サーバー間認証を使用して、Adobe Developer Consoleを通じてアクセストークンを生成します。
  • Adobe Developer Consoleからクライアント ID を取得
NOTE
Adobe Developer Consoleを使用した OAuth サーバー間認証について詳しくは、​ ここをクリック ​ を参照してください。

開発ツール

  • サンプルアプリケーションの実行用の Node.js
  • Git の最新バージョン
  • ターミナル/コマンドライン へのアクセス
  • 設定ファイル編集用の テキストエディターまたは IDE (VS Code、IntelliJ など)
  • Postman または API テスト用の同様のツール
NOTE
これは、環境ごとに 1 回限りのプロセスです。AEM Forms Communications API の設定を進める前に、このプロセスを完了する必要があります。

AEM Forms通信の同期 API の設定

AEM Forms Communication API には、OAuth サーバー間認証を使用して、Adobe Developer Console経由でアクセスします。

次の手順では、テンプレートと XDP ファイルを使用してFormsを生成するようにPDF通信同期 API を設定する方法について説明します。

手順 1:AEM Cloud Service 環境とAEM Forms エンドポイントへのアクセス

AEM Cloud Service 環境の詳細にアクセスして、API 設定に必要な URL と識別子を取得します。

1.1 Adobe Cloud Managerへのログイン

  1. my.cloudmanager.adobe.com に移動します。
  2. Adobe IDでログイン

1.2. プログラムの概要に移動する

リストからプログラムを選択します。 プログラムの概要 ページにリダイレクトされます

プログラムの概要ページ

1.3 AEM Cloud Service 環境へのアクセスと表示

AEM Cloud Service 環境の詳細の表示またはアクセスには、次の 2 つのオプションのいずれかを使用できます。

オプション 1:概要ページから
  1. プログラムの概要 ページで、次の操作を行います

  2. 左側のメニューで 「環境」 クリックします。 すべての環境のリストが表示されます

  3. 特定の環境名をクリックすると詳細を表示できます

    すべての環境を表示

オプション 2:環境セクションから
  1. プログラムの概要 ページで、次の操作を行います

  2. 環境 セクションを見つけます

  3. 「すべて表示」 をクリックして、すべての環境を表示します

  4. 環境の横にある 省略記号メニュー(…) をクリックします

  5. 「詳細 表示」を選択し す。

    オプション 1 – 環境の詳細

1.4. AEM Forms エンドポイントの検索

環境 の詳細ページで、AEMの URL インスタンスを確認します。

オプション 1 – 環境の詳細

NOTE
AEM Cloud Service 環境およびAEM Forms エンドポイントにアクセスする方法については、​ 環境の管理に関するドキュメント ​ を参照してください。

手順 2:Git リポジトリの複製

Cloud Manager Git リポジトリーをクローンして、API 設定ファイルを管理します。

2.1 リポジトリセクションを見つける

  1. プログラムの概要 ページで、「リポジトリ」タブをクリックします

  2. リポジトリ名を見つけ、省略記号メニュー(…)をクリックします。

  3. リポジトリー URL をコピー

    リポジトリ URL をコピー

NOTE
通常、URL 形式は https://git.cloudmanager.adobe.com/<org>/<program>/ です

2.2 Git コマンドを使用したクローン

  1. コマンドプロンプトまたはターミナルを開きます

  2. git clone コマンドを実行して、Git リポジトリを複製します。

    code language-bash
    git clone [repository-url]
    
NOTE
Git リポジトリを複製するには、Adobe Cloud Managerから提供された資格情報を使用します。

例えば、Git リポジトリーをクローンするには、次のコマンドを実行します。

https://git.cloudmanager.adobe.com/formsinternal01/AEMFormsInternal-ReleaseSanity-pXXX-ukYYYY/

Git リポジトリのクローン作成

Adobe Cloud ManagerとAdobe Cloud Managerの統合方法について詳しくは、Git 統合に関するドキュメント ​ を参照してください。

手順 3:Adobe Developer Console プロジェクトのセットアップ

3.1 Adobe Developer Consoleへのアクセス

  1. Adobe Developer Console に移動します
  2. Adobe IDでログイン
  3. 新しいプロジェクトを作成するか、既存のプロジェクトに移動します
新しいプロジェクトを作成するには
  1. クイックスタート」セクションで、「新規プロジェクトを作成」をクリックします

  2. デフォルト名で新しいプロジェクトが作成されます

    ADC プロジェクトの作成

  3. 右上隅の プロジェクトを編集 をクリックします

    プロジェクトを編集

  4. 意味のある名前を指定(例:「formsproject」)

  5. 保存」をクリックします。

    プロジェクト名を編集

既存のプロジェクトに移動するには
  1. Adobe Developer Consoleで すべてのプロジェクト をクリックします

    プロジェクトの検索

  2. プロジェクトを見つけて、クリックして開きます。

    プロジェクトの検索

3.2 Forms Communication API の追加

  1. API を追加」をクリックします。

    API を追加

  2. API を追加 ダイアログで、Experience Cloudでフィルタリングします

  3. 「Forms Communication API を選択し す。

    Forms Communication API の追加

  4. 次へ」をクリックします。

  5. OAuth サーバー間 認証方法を選択します

    認証方法の選択

  6. 次へ」をクリックします。

3.3 製品プロファイルの追加

  1. お使いのAEM インスタンス URL ()に一致する 製品プロファイル https://Service Type -Environment Type-Program XXX-Environment XXX.adobeaemcloud.com を選択します。

  2. 設定済み API を保存」をクリックします。API と製品プロファイルがプロジェクトに追加されます

    プロジェクト設定の選択

  3. 資格情報の詳細 セクションを表示します

    資格情報の表示

レコード API 資格情報

    API Credentials:
    ================
    Client ID: <your_client_id>
    Client Secret: <your_client_secret>
    Technical Account ID: <tech_account_id>
    Organization ID: <org_id>
    Scopes: AdobeID,openid,read_organizations

3.4 アクセスの生成

テスト用

Adobe Developer Consoleで手動でアクセストークンを生成します。

  1. プロジェクトの「API」セクションで 「アクセストークンを生成」 ボタンをクリックします

  2. 生成されたアクセストークンのコピー

    アクセストークンの生成

note note
NOTE
アクセストークンは 24 時間 のみ有効です
実稼動用

Adobe IMS API を使用してプログラムでトークンを生成します:

必要な資格情報:

  • クライアント ID
  • クライアントの秘密鍵
  • 範囲(通常:openid, AdobeID, read_organizations, additional_info.projectedProductContext, read_pc.dma_aem_cloud, aem.document

トークン エンドポイント:

code language-none
    https://ims-na1.adobelogin.com/ims/token/v3

サンプルリクエスト (curl):

code language-bash
    curl -X POST 'https://ims-na1.adobelogin.com/ims/token/v3' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -d 'grant_type=client_credentials' \
    -d 'client_id=<YOUR_CLIENT_ID>' \
    -d 'client_secret=<YOUR_CLIENT_SECRET>' \
    -d 'scope=AdobeID,openid,read_organizations'

応答:

code language-json
        {
        "access_token": "eyJhbGciOiJSUz...",
        "token_type": "bearer",
        "expires_in": 86399
        }

生成されたアクセストークンを使用して、開発、ステージ、実稼動環境の API 呼び出しを行えるようになりました。

NOTE
Adobe Developer Consoleを使用した OAuth サーバー間認証について詳しくは、「OAuth サーバー間認証 ​」の記事を参照してください。

手順 4:クライアント ID のAEM環境への登録

ADC プロジェクトのクライアント ID がAEM インスタンスと通信できるようにするには、YAML 設定ファイルを使用して登録し、設定パイプラインを介してデプロイする必要があります。

4.1 構成ディレクトリの検索または作成

  1. 複製されたAEM プロジェクトリポジトリに移動し、config フォルダーを見つけます

  2. 存在しない場合は、プロジェクトのルートレベルで作成します。

    code language-bash
    mkdir config
    
  3. api.yaml ディレクトリに config という名前の新しいファイルを作成します。

    code language-bash
    touch config/api.yaml
    
  4. api.yaml ファイルに次のコードを追加します。

    code language-yaml
    kind: "API"
    version: "1"
    metadata:
    envTypes: ["dev"]  # or ["prod", "stage"] for production environments
    data:
    allowedClientIDs:
        author:
        - "<your_client_id>"
        publish:
        - "<your_client_id>"
        preview:
        - "<your_client_id>"
    

設定パラメーターを次に説明します。

  • kind:常に "API" に設定します(API 設定として識別します)

  • version:API バージョン(通常は "1" または "1.0"

  • envTypes:この設定が適用される環境タイプの配列

    • ["dev"] – 開発環境のみ
    • ["stage"] - ステージング環境のみ
    • ["prod"] – 実稼動環境のみ
  • allowedClientIDs:AEM インスタンスへのアクセスが許可されたクライアント ID

    • オーサー:オーサー層のクライアント ID
    • パブリッシュ:パブリッシュ層のクライアント ID
    • preview:プレビュー層のクライアント ID

設定ファイルの追加

4.2 コミットとプッシュの変更

  1. クローンしたリポジトリのルートフォルダーに移動して、以下のコマンドを実行します。

    code language-bash
        git add config/api.yaml
        git commit -m "Whitelist client id for api invocation"
        git push origin <your-branch>
    

    Git の変更のプッシュ

手順 5:設定パイプラインの設定

5.1 Adobe Cloud Managerへのログイン

  1. my.cloudmanager.adobe.com に移動します。
  2. Adobe IDでログイン

5.1 パイプラインカードを見つける

  1. プログラムの概要ページで パイプライン カードを見つけます

  2. 「追加 ボタンをクリ

    パイプラインを追加

5.2 パイプラインタイプの選択

  • 開発環境の場合:「実稼動以外のパイプラインを追加」 を選択します。 実稼動以外のパイプラインは、開発環境とステージング環境用です

  • 実稼動環境の場合:「実稼動パイプラインを追加」 を選択します。 実稼動パイプラインには追加の承認が必要です

NOTE
この場合、開発環境が使用可能なので、実稼動以外のパイプラインを作成します。

1. パイプラインの設定 – 「設定」タブ

設定」タブで、次のように設定します。

a. パイプラインタイプ

  • 「デプロイメントパイプライン を選択

b. パイプライン名

  • わかりやすい名前を指定(例:パイプラインに api-config-pipieline という名前を付ける)

c. 導入トリガー

  • 手動:手動でトリガーされた場合にのみデプロイします(初期設定で推奨)
  • Git の変更時:変更がブランチにプッシュされると自動デプロイされます

d. 重要な指標のエラー動作

  • 毎回確認する:失敗時にアクションを要求する(デフォルト)
  • 直ちに失敗:指標の失敗時にパイプラインを自動的に失敗します
  • 直ちに続行:失敗しても続行します

e. 「続行」をクリックしてSource コード」タブに進みます

設定パイプライン

2. パイプラインを設定 – 「Sourceコード」タブ

Source コード」タブで、次のように設定します。

a. デプロイメントタイプ

  • 「ターゲットデプロイメント を選択

b. デプロイメントオプション

  • Config」 を選択します(設定ファイルのみをデプロイします)。 これは、Cloud Managerに config デプロイメントであることを示しています。

c. 適格なデプロイメント環境を選択

  • 設定をデプロイする環境を選択します。 この場合、これは dev 環境です。

d. Source コードの詳細を定義

  • リポジトリ:api.yaml ファイルを含むリポジトリを選択します。 例えば、AEMFormsInternal-ReleaseSanity-pXXXXX-ukYYYYY リポジトリを選択します。
  • Git ブランチ:ブランチを選択します。 例えば、この場合、コードは main ブランチにデプロイされます。
  • コードの場所:ディレクトリへのパス config 入力します。 api.yaml はルートのフォルダーにあ config ので、/config と入力します

e. 「保存」 をクリックして、パイプラインを作成します

設定パイプライン

手順 6:設定のデプロイ

パイプラインが作成されたら、api.yaml 設定をデプロイします

6.1 - パイプラインの概要

  1. プログラムの概要ページで、「パイプライン カードを見つけます
  2. リストで新しく作成した設定パイプラインに移動します。 例えば、作成したパイプライン名(「api-config-pipeline」など)を探します。 ステータスや前回の実行を含むパイプラインの詳細を確認できます。

6.2 デプロイメントの開始**

  1. パイプラインの横にある 「ビルド」 ボタン(または再生アイコン ▶)をクリックします
  2. プロンプトが表示されたらデプロイメントを確認し、パイプラインの実行を開始します

パイプラインを実行

6.3 デプロイメントの成功の確認

  • パイプラインが完了するのを待ちます。

    • 成功すると、ステータスが「成功」(緑色のチェックマーク ✓)に変わります。

    • 失敗した場合は、ステータスが「失敗」(赤十字 ✗)に変わります。 ログをダウンロード をクリックして、エラーの詳細を表示します。

      パイプライン成功

これで、Forms Communications API のテストを開始できます。 テストの目的で、Postman、curl、またはその他の REST クライアントを使用して、API を呼び出すことができます。

手順 7:API の仕様とテスト

これで環境が設定されたので、Swagger UI を使用して、または NodeJS アプリケーションを開発することによってプログラムで、AEM Forms Communication API のテストを開始できます。

A.API テストへの Swagger UI の使用

Swagger UI には、コードを記述せずに API をテストするためのインタラクティブなインターフェイスが用意されています。試す 機能を使用して、Forms通信 API の PDFを生成 ​ を呼び出してテストします。

  1. Forms Communication API Reference に移動し ​ ブラウザーで Forms Communication API ドキュメントを開きます。

  2. ドキュメントの生成」セクションを展開し、「XDP またはPDF テンプレートから入力可能なPDF フォームを生成します(オプションでデータ結合も可能 ​」を選択します。

  3. 右側のウィンドウで、「試す をクリックし す。

    API の Swagger テスト

  4. 以下の値を入力します。

    table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3
    セクション パラメーター
    バケット AEM インスタンス AEM インスタンス名(Adobe ドメイン名(.adobeaemcloud.com)を除いたもの。例えば、pXXXXX-eYYYYY をバケットとして使用します。
    セキュリティ ベアラートークン Adobe Developer Console プロジェクトの OAuth サーバー間資格情報からのアクセストークン ​ を使用します。
    本文 テンプレート XDP をアップロードしてPDF フォームを生成します。 例えば、​ この XDP を使用してPDFを生成できます。
    本文 data 事前入力されたPDF フォームを生成するためにテンプレートと結合されるデータを含む、オプションの XML ファイル。 例えば、​ この XML を使用してPDFを生成できます。
    パラメーター X-Adobe-Accept-Experimental 1
  5. 送信」をクリックして、API を呼び出します

    送信 API

  6. 応答 タブで応答を確認します。

    • 応答コードが 200 の場合は、PDFが正常に作成されたことを意味します。
    • 応答コードが 400 の場合は、リクエストパラメーターが無効か、形式が正しくないことを意味します。
    • 応答コードが 500 の場合は、内部サーバーエラーがあることを意味します。
    • 応答コードが 403 の場合は、認証エラーがあることを意味します。

    この場合、応答コードは 200 です。これは、PDFが正常に生成されたことを意味します。

    レビューの回答

    これで、「​ ダウンロード ​ ボタンを使用して 作成したPDF をダウンロードし、PDF ビューアで表示できます。

    PDFを表示

    note note
    NOTE
    テストの目的で、Postmancurl またはその他の REST クライアントを使用して、AEM API を呼び出すこともできます。
B.NodeJS アプリケーションを開発することにより、プログラムで行 ます。

Document Services API を使用して、 XDP テンプレートおよび XML データファイルから入力可能なPDF フォームを生成するための Node.js アプリケーションを開発 ます。

前提条件

  • システムにインストールされている Node.js
  • アクティブなAEM as a Cloud Service インスタンス
  • Adobe Developer Consoleからの API 認証用のベアラートークン
  • サンプル XDP ファイル:ClosingForm.xdp
  • サンプル XML ファイル:ClosingForm.xml

Node.js アプリケーションを開発するには、以下の開発手順に従います。

手順 1:新しい Node.js プロジェクトの作成

cmd/terminal を開き、次のコマンドを実行します。

code language-bash
# Create a new directory
mkdir demo-nodejs-generate-pdf
cd demo-nodejs-generate-pdf

##### Initialize Node.js project
npm init -y

新しい node js プロジェクトの作成

手順 2:必要な依存関係をインストールする

node-fetchdotenvform-data ライブラリをインストールして、HTTP リクエストを行い、環境変数を読み取り、フォームデータを処理します。

code language-bash
npm install node-fetch
npm install dotenv
npm install form-data

npm 依存関係のインストール

手順 3:package.json を更新

  1. cmd/terminal を開き、コマンドを実行します。

    code language-bash
    code .
    

    エディターでプロジェクトを開く

    コードエディターでプロジェクトが開きます。

  2. package.json ファイルを更新して、typemodule に追加します。

    code language-bash
    {
    "name": "demo-nodejs-generate-pdf",
    "version": "1.0.0",
    "type": "module",
    "main": "index.js",
    }
    

    パッケージ ファイルの更新

手順 4:.env ファイルの作成

  1. プロジェクトのルートレベルに.env ファイルを作成します

  2. 次の設定を追加し、プレースホルダーを ADC プロジェクトの OAuth サーバー間資格情報の実際の値に置き換えます。

    code language-bash
    CLIENT_ID=<ADC Project OAuth Server-to-Server credential ClientID>
    CLIENT_SECRET=<ADC Project OAuth Server-to-Server credential Client Secret>
    SCOPES=<ADC Project OAuth Server-to-Server credential Scopes>
    

    環境ファイルを作成

    note note
    NOTE
    CLIENT_IDCLIENT_SECRET および SCOPES をAdobe Developer Console プロジェクトからコピーできます。

手順 5:src/index.jsを作成する

  1. プロジェク index.js のルートレベルにファイルを作成します
  2. 次のコードを追加し、プレースホルダーを実際の値に置き換えます。
code language-javascript
// Import the dotenv configuration to load environment variables from the .env file
import "dotenv/config";

// Import fetch for making HTTP requests
import fetch from "node-fetch";
import fs from "fs";
import FormData from "form-data";

// REPLACE THE FOLLOWING VALUE WITH YOUR OWN
const bucket = <bucket-value>; // Your AEM Cloud Service Bucket name
const xdpFilePath = <xdp-file>;
const xmlFilePath = <xml-file>;

// Load environment variables
const clientId = process.env.CLIENT_ID;
const clientSecret = process.env.CLIENT_SECRET;
const scopes = process.env.SCOPES;

// Adobe IMS endpoint for obtaining an access token
const adobeIMSV3TokenEndpointURL = "https://ims-na1.adobelogin.com/ims/token/v3";

// Function to get an access token
const getAccessToken = async () => {
    console.log("Getting access token from IMS...");

    const options = {
        method: "POST",
        headers: {
            "Content-Type": "application/x-www-form-urlencoded",
        },
        body: `grant_type=client_credentials&client_id=${clientId}&client_secret=${clientSecret}&scope=${scopes}`,
    };

    const response = await fetch(adobeIMSV3TokenEndpointURL, options);
    const responseJSON = await response.json();

    console.log("Access token received.");
    return responseJSON.access_token;
};

// Function to generate PDF form from XDP and XML
const generatePDF = async () => {
    const accessToken = await getAccessToken();

    console.log("Generating PDF form from XDP and XML...");

    // Read XDP and XML files
    const xdpFile = fs.readFileSync(xdpFilePath);
    const xmlFile = fs.readFileSync(xmlFilePath);

    const url = `https://${bucket}.adobeaemcloud.com/adobe/document/generate/pdfform`;

    const formData = new FormData();
    formData.append("template", xdpFile, {
        filename: "form.xdp",
        contentType: "application/vnd.adobe.xdp+xml"
    });
    formData.append("data", xmlFile, {
        filename: "data.xml",
        contentType: "application/xml"
    });

    const response = await fetch(url, {
        method: "POST",
        headers: {
            Authorization: `Bearer ${accessToken}`,
            "X-Api-Key": clientId,
            "X-Adobe-Accept-Experimental": "1",
            ...formData.getHeaders()
        },
        body: formData,
    });

    if (response.ok) {
        const arrayBuffer = await response.arrayBuffer();
        fs.writeFileSync("generatedForm.pdf", Buffer.from(arrayBuffer));
        console.log("✅ PDF form generated successfully (saved as generatedForm.pdf)");
    } else {
        console.error("❌ Failed to generate PDF. Status:", response.status);
        console.error(await response.text());
    }
};

// Run the PDF generation function
generatePDF();

index.js を作成

手順 6:アプリケーションを実行する

code language-bash
node src/index.js

アプリケーションの実行

demo-nodejs-generate-pdf フォルダーにPDFが作成されます。 フォルダーに移動して、generatedForm.pdf という名前の生成されたファイルを見つけます。

作成された pdf を表示

PDFを表示

​ 生成されたPDF を開いて確認できます。

トラブルシューティング

一般的な問題と考えられる原因

問題 1:403 Forbidden エラー

症状:

  • API リクエストの戻り 403 Forbidden
  • エラーメッセージ:未認証のアクセス

考えられる原因:

  • クライアント ID がAEM インスタンスの api.yaml 設定に登録されていません

問題 2:401 Unauthorized エラー

症状:

  • API リクエストの戻り 401 Unauthorized
  • エラーメッセージ:トークンが無効または期限切れです

考えられる原因:

  • アクセストークンが期限切れです(24 時間のみ有効)
  • クライアント ID とクライアント秘密鍵が正しくないか、一致しません

問題 3:404 エラーが見つからない

症状:

  • API リクエストの戻り 404 Not Found
  • エラーメッセージ:リソースが見つかりません または API エンドポイントが見つかりません

考えられる原因:

  • バケットパラメーターが正しくありません(AEM インスタンスの識別子と一致しません)

問題 4:パイプラインのデプロイメントに失敗する

症状:

  • 設定パイプラインの実行に失敗
  • デプロイメントログに、api.yaml に関連するエラーが表示される

考えられる原因:

  • YAML 構文(インデント、引用符、または配列形式の問題)が無効です
  • api.yaml が間違ったディレクトリに配置されています
  • 設定のクライアント ID の形式が正しくないか、正しくありません
  • クライアントシークレットが無効です

問題 5:Forms Communication API を実行できない

症状:

  • API リクエストが、サポートされていない機能または使用できない機能を示すエラーを返します。
  • XDP と XML を使用したPDFの生成が機能しない。
  • パイプラインのデプロイメントは正常に完了しますが、ランタイム API 呼び出しは失敗します。

考えられる原因:

AEM環境は、Forms通信 API が導入またはサポートされる前にリリースされたバージョンを実行しています。
AEM環境を更新するには、AEM インスタンスの更新 ​ の節を参照してください。

AEM インスタンスの更新

「環境の詳細」を検索するようにAEM インスタンスを更新するには:

  1. 環境名の横にある「ellipsis (…)」アイコンを選択し、「更新」をクリックします

  2. 送信 ボタンをクリックし、提案されたフルスタックパイプラインを実行します。

    環境の更新

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab