[Alpha]{class="badge informative"}
認証
Server SDKは、お客様が管理する信頼できる環境で実行されます。 このため、ブラウザーが使用する未認証のエンドポイントではなく、認証済みのEdge Network Server APIにイベントを送信します。 認証済みリクエストを使用すると、Edge Networkはサーバーが送信するデータを信頼できます。
認証するには、SDKにAdobe Developer Consoleから OAuth Server-to-Server資格情報 が必要です。 必要に応じてedgeCredentials オプションを使用してconfigureに渡します。 SDKは、資格情報を使用してAdobeからアクセストークンをリクエストし、認証された各リクエストにトークンを追加します。
OAuth サーバー間資格情報の作成 create-credential
資格情報を作成するには、組織内のAdobe Experience Platformの開発者およびユーザーである必要があります。 次の手順を実行します。
-
Adobe Developer Consoleにログインし、組織を選択します。
-
プロジェクトに移動して、既存のプロジェクトを選択するか、新しいプロジェクトを作成します。
-
Experience Platform APIをプロジェクトに追加し、認証タイプとして OAuth Server-to-Server を選択します。
-
資格情報の製品プロファイルを選択します。
-
資格情報のページで、次の値をコピーします。
- クライアント ID
- クライアント秘密鍵。 「クライアントシークレットを取得」を選択して表示します。
- 範囲
開発者とユーザーのアクセス権を取得する方法など、各手順の詳細な手順とスクリーンショットについては、Experience Platform APIの認証とアクセス を参照してください。
資格情報を使用したSDKの設定 configure
configureを呼び出すときにedgeCredentials オプションにコピーした値を渡します。 ソースコードに配置する代わりに、環境変数またはシークレットマネージャーから読み取ります。
await alloy.configure({
datastreamId: "ebebf826-a01f-4458-8cec-ef61de241c93",
orgId: "ADB3LETTERSANDNUMBERS@AdobeOrg",
edgeCredentials: {
clientId: process.env.ADOBE_CLIENT_ID,
clientSecret: process.env.ADOBE_CLIENT_SECRET,
scopes: process.env.ADOBE_SCOPES.split(",")
}
});
edgeCredentialsを省略すると、configureはエラーで拒否します。 プロパティの完全なリストについては、edgeCredentialsを参照してください。
資格情報とorgId オプションに同じ組織を使用します。 SDKは、認証済みの各リクエストのx-gw-ims-org-id ヘッダーにorgIdを送信します。
認証されるリクエスト authenticated-requests
認証済みサーバーAPIを使用するのはsendEventのみです。 Server APIは、ID要求と同意要求に対応するエンドポイントを提供していないため、これらのメソッドは、Web SDKと同じように、未認証のリクエストを標準のEdge Network エンドポイントに送信します。 SDKがエンドポイントを選択します。
thirdPartyCookiesEnabledがデフォルトのtrueの場合、訪問者の最初の未認証リクエストはedgeDomainではなくadobedc.demdex.netに送信されます。
認証された各リクエストには、次のヘッダーが含まれます。
Authorization: SDKが資格情報で取得したアクセストークン。x-api-key:資格情報のclientId。x-gw-ims-org-id:設定したorgIdです。
データストリームアクセスの種類の設定 datastream-access-type
データストリームには、Edge Networkが未認証のリクエストを受け入れるかどうかを制御する アクセスの種類 設定があります。 データストリームガイドの高度なオプションの設定を参照してください。
- 混合認証:認証済み要求と未認証の要求の両方を受け入れます。 この設定は、
getIdentity、appendIdentityToUrl、setConsentを呼び出す場合、またはWeb SDKと同じデータストリームにブラウザーページからデータを送信する場合に使用します。 - 認証済みのみ:認証済みの要求のみを受け入れます。 この設定は、このデータストリームで
sendEvent以外を呼び出さない場合にのみ使用してください。
イベントにプライマリ IDを含める primary-identity
Edge Networkは、サーバー間リクエストで訪問者のブラウザーからCookieを読み取ることはできません。 このため、サーバーAPIが受信するすべてのイベントには、イベントのidentityMapにプライマリ IDを含める必要があります。 イベントにイベントが含まれていない場合、Edge Networkはエラーコード EXEG-0306-400でイベントを拒否します。
await visitor.sendEvent({
xdm: {
eventType: "web.webpagedetails.pageViews",
identityMap: {
Email: [{ id: "visitor@example.com", primary: true }]
}
}
});
詳しくは、xdmを参照してください。
アクセストークンのキャッシュ token-caching
SDKは、configureを呼び出すときではなく、認証済みリクエストを初めて送信したときに、Adobe Identity Management サービス(IMS)からアクセストークンをリクエストします。 その後、トークンの有効期限が5分前になるまでトークンを再利用します。 インスタンスが作成するforRequest ハンドルごとに、1つのキャッシュ トークンを共有します。 トップレベルのインスタンスは、独自のトークンを個別にキャッシュします。これは、イベントを直接送信する場合にのみ重要です。 アクセストークンは約24時間有効なので、ビジーなサーバーは訪問者ごとに1回ではなく1日に1回ほど新しいトークンをリクエストします。
複数のリクエストが同時にトークンを必要とする場合、1つのトークンリクエストを共有します。 例えば、クライアントの秘密鍵が間違っているなどの理由でトークン要求が失敗した場合、トークンをトリガーしたメソッドは、メッセージにFailed to acquire an IMS access tokenが含まれるエラーで拒否されます。
資格情報の保護 protect-credentials
クライアントシークレットは、組織のデータへのアクセスを許可します。 次の手順に従います。
- クライアント ID、クライアント シークレット、およびスコープを環境変数またはシークレット マネージャーに保存します。 ソースコントロールにはコミットしないでください。
- クライアントの秘密鍵をブラウザーに絶対に送信しない。 Server SDKは、訪問者がダウンロードまたは検査できないサーバーコードでのみ使用します。
- クライアントの秘密鍵が公開されたと思われる場合は、Adobe Developer Consoleでローテーションします。
SDKはクライアント秘密鍵を墨消しし、[REDACTED]に置き換えます。デバッグログと、getLibraryInfoが返す設定で書き換えます。