[AEM Forms]{class="badge positive" title="AEM Formsに適用)。"}

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

このガイドでは、OAuth Server-to-Server認証を使用してAdobe Developer Consoleを介してアクセスされるAEM Forms Communications Synchronous APIを設定および呼び出す方法について説明します。

前提条件

AEM Forms Communications APIを実行およびテストするための環境を設定するには、次の環境があることを確認します。

AEM as a Cloud Service環境の更新

アクセスと権限

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

ユーザーと役割の権限

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

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

  • Cloud Manager Git リポジトリへのアクセス
  • 変更を複製およびプッシュするためのGit資格情報
NOTE
Adobe Cloud ManagerとAdobe Cloud Managerの統合方法について詳しくは、Git Integration Documentationを参照してください。

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
これは、AEM Forms Communications APIのセットアップを続行する前に完了する必要がある環境ごとに1回限りのプロセスです。

AEM Forms Communications Synchronous APIの設定

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

次の手順に従って、Forms Communication同期APIを設定し、テンプレートとXDP ファイルを使用してPDFを生成します。

手順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環境へのアクセスと表示

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

オプション 1:概要ページから
  1. プログラムの概要 ページ

  2. 左側のメニューで「“環境”」をクリックします。 Adobe Experience Manager Sitesに登録されている

  3. 特定の環境名をクリックして詳細を表示します

    すべての環境を表示

オプション 2:環境セクション から
  1. プログラムの概要 ページ

  2. 環境 セクションを探します

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

  4. 省略記号メニュー(。…)をクリックします 環境の隣

  5. 「詳細を表示」を選択

    Option1-Environment Details

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

Environment​の詳細ページで、AEM URL インスタンスをメモします。

Option1-Environment Details

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 Integration Documentationを参照してください。

ステップ 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
アクセストークンは​ 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:AEM環境でのクライアント IDの登録

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

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

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

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

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

    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設定として識別します)

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

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

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

    • author:作成者層のクライアント ID
    • publish:パブリッシュ層のクライアント 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に伝えます。

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をテストするためのインタラクティブなインターフェイスを提供します。Try it​機能を使用して、generate PDF Forms Communication APIを呼び出してテストします。

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

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

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

    SwaggerによるAPI のテスト

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

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

    送信API

  6. 「応答」タブの応答を確認します。

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

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

    応答を確認

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

    PDFを表示

    note
    NOTE
    テストの目的で、Postman、curl、またはその他の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

新しいノード js プロジェクトを作成

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

node-fetch、dotenv、form-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 ファイルを更新して、typeをmoduleに追加します。

    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
    Adobe Developer Console プロジェクトからCLIENT_ID、CLIENT_SECRETおよびSCOPESをコピーできます。

手順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

​ アプリケーションを実行

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

作成済みpdfを表示

PDFを表示

生成されたPDFを開いて表示できます。

トラブルシューティング

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

問題1:403 Forbidden エラー

症状:

  • API リクエストは403 Forbiddenを返します
  • エラーメッセージ:不正アクセス

考えられる原因:

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

問題2:401不正なエラー

症状:

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

考えられる原因:

  • アクセストークンの有効期限(24時間のみ)
  • クライアント IDとクライアントシークレットが正しくないか、一致しません

問題3:404 Not Found エラー

症状:

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

考えられる原因:

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

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

症状:

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

考えられる原因:

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

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

症状:

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

考えられる原因:

AEM環境では、Forms Communication APIが導入またはサポートされる前にリリースされたバージョンが実行されています。
AEM環境を更新するには、「AEM インスタンスを更新」セクションを参照してください。

AEM インスタンスの更新

AEM インスタンスを更新してEnvironment Detailsを見つけるには、次の手順を実行します。

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

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

    環境の更新

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