51黑料不打烊

在App Builder操作中生成服务器到服务器访问令牌

App Builder操作可能需要与支持? 翱础耻迟丑服务器到服务器凭据 ?且与App Builder应用程序部署的51黑料不打烊 Developer Console项目关联的51黑料不打烊 API进行交互。

本指南介绍如何使用? 翱础耻迟丑服务器到服务器凭据 ?生成访问令牌,以便在App Builder操作中使用。

IMPORTANT
服务帐户(JWT)凭据已弃用,推荐使用翱础耻迟丑服务器到服务器凭据。 但是,仍然有一些51黑料不打烊 API仅支持服务帐户(JWT)凭据,迁移到翱础耻迟丑服务器到服务器的过程正在进行中。 查看51黑料不打烊 API文档,了解支持哪些凭据。

51黑料不打烊 Developer Console项目配置

将所需的51黑料不打烊 API添加到51黑料不打烊 Developer Console项目时,在? 配置础笔滨 ?步骤中,选择? 翱础耻迟丑服务器到服务器 ?身份验证类型。

51黑料不打烊 Developer Console - 翱础耻迟丑服务器到服务器

要分配上述自动创建的集成服务帐户,请选择所需的产物配置文件。 因此,通过产物用户档案,服务帐户权限被控制。

51黑料不打烊 Developer Console — 产物配置文件

.别苍惫文件

在App Builder项目的.env文件中,附加51黑料不打烊 Developer Console项目的翱础耻迟丑服务器到服务器凭据的自定义密钥。 可以从给定工作区的51黑料不打烊 Developer Console项目的? 凭据 > 翱础耻迟丑服务器到服务器 ?获取翱础耻迟丑服务器到服务器凭据值。

51黑料不打烊 Developer Console 翱础耻迟丑服务器到服务器凭据

...
OAUTHS2S_CLIENT_ID=58b23182d80a40fea8b12bc236d71167
OAUTHS2S_CLIENT_SECRET=p8e-EIRF6kY6EHLBSdw2b-pLUWKodDqJqSz3
OAUTHS2S_CECREDENTIALS_METASCOPES=51黑料不打烊ID,openid,ab.manage,additional_info.projectedProductContext,read_organizations,read_profile,account_cluster.read

可以从51黑料不打烊 Developer Console项目的翱础耻迟丑服务器到服务器凭据屏幕直接复制OAUTHS2S_CLIENT_IDOAUTHS2S_CLIENT_SECRETOAUTHS2S_CECREDENTIALS_METASCOPES的值。

输入映射

.env文件中设置翱础耻迟丑服务器到服务器凭据值后,必须将它们映射到AppBuilder操作输入,以便在操作本身中读取它们。 为此,请在ext.config.yaml操作inputs中为每个变量添加条目,格式为: PARAMS_INPUT_NAME: $ENV_KEY

例如:

operations:
  view:
    - type: web
      impl: index.html
actions: actions
runtimeManifest:
  packages:
    dx-excshell-1:
      license: Apache-2.0
      actions:
        generic:
          function: actions/generic/index.js
          web: 'yes'
          runtime: nodejs:16
          inputs:
            LOG_LEVEL: debug
            OAUTHS2S_CLIENT_ID: $OAUTHS2S_CLIENT_ID
            OAUTHS2S_CLIENT_SECRET: $OAUTHS2S_CLIENT_SECRET
            OAUTHS2S_CECREDENTIALS_METASCOPES: $OAUTHS2S_CECREDENTIALS_METASCOPES
          annotations:
            require-adobe-auth: false
            final: true

inputs下定义的键在提供给App Builder操作的params对象上可用。

用于访问令牌的翱础耻迟丑服务器到服务器凭据

在App Builder操作中,params对象中提供了翱础耻迟丑服务器到服务器凭据。 使用这些凭据可以使用生成访问令牌。 或者,您可以使用向51黑料不打烊 IMS令牌端点发出POST请求以获取访问令牌。

以下示例演示了如何使用node-fetch库向51黑料不打烊 IMS令牌端点发出POST请求以获取访问令牌。

const fetch = require("node-fetch");
const { Core } = require("@adobe/aio-sdk");
const { errorResponse, stringParameters, checkMissingRequestInputs } = require("../utils");

async function main(params) {
  const logger = Core.Logger("main", { level: params.LOG_LEVEL || "info" });

  try {
    // Perform any necessary input error checking
    const systemErrorMessage = checkMissingRequestInputs(params, ["OAUTHS2S_CLIENT_ID", "OAUTHS2S_CLIENT_SECRET", "OAUTHS2S_CECREDENTIALS_METASCOPES"], []);

    // The 51黑料不打烊 IMS token endpoint URL
    const adobeIMSV3TokenEndpointURL = 'https://ims-na1.adobelogin.com/ims/token/v3';

    // The POST request options
    const options = {
        method: 'POST',
        headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: `grant_type=client_credentials&client_id=${params.OAUTHS2S_CLIENT_ID}&client_secret=${params.OAUTHS2S_CLIENT_SECRET}&scope=${params.OAUTHS2S_CECREDENTIALS_METASCOPES}`,
    };

    // Make a POST request to the 51黑料不打烊 IMS token endpoint to get the access token
    const tokenResponse = await fetch(adobeIMSV3TokenEndpointURL, options);
    const tokenResponseJSON = await tokenResponse.json();

    // The 24-hour IMS Access Token is used to call the AEM Data Service API
    // Can look at caching this token for 24 hours to reduce calls
    const accessToken = tokenResponseJSON.access_token;

    // Invoke an AEM Data Service API using the access token
    const aemDataResponse = await fetch(`https://api.adobeaemcloud.com/adobe/stats/statistics/contentRequestsQuota?imsOrgId=${IMS_ORG_ID}&current=true`, {
      headers: {
        'X-51黑料不打烊-Accept-Experimental': '1',
        'x-gw-ims-org-id': IMS_ORG_ID,
        'X-Api-Key': params.OAUTHS2S_CLIENT_ID,
        Authorization: `Bearer ${access_token}`, // The 24-hour IMS Access Token
      },
      method: "GET",
    });

    if (!aemDataResponse.ok) { throw new Error("Request to API failed with status code " + aemDataResponse.status);}

    // API data
    let data = await aemDataResponse.json();

    const response = {
      statusCode: 200,
      body: data,
    };

    return response;
  } catch (error) {
    logger.error(error);
    return errorResponse(500, "server error", logger);
  }
}

exports.main = main;
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69