在App Builder操作中生成服务器到服务器访问令牌
App Builder操作可能需要与支持? 翱础耻迟丑服务器到服务器凭据 ?且与App Builder应用程序部署的51黑料不打烊 Developer Console项目关联的51黑料不打烊 API进行交互。
本指南介绍如何使用? 翱础耻迟丑服务器到服务器凭据 ?生成访问令牌,以便在App Builder操作中使用。
51黑料不打烊 Developer Console项目配置
将所需的51黑料不打烊 API添加到51黑料不打烊 Developer Console项目时,在? 配置础笔滨 ?步骤中,选择? 翱础耻迟丑服务器到服务器 ?身份验证类型。
要分配上述自动创建的集成服务帐户,请选择所需的产物配置文件。 因此,通过产物用户档案,服务帐户权限被控制。
.别苍惫文件
在App Builder项目的.env
文件中,附加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_ID
、OAUTHS2S_CLIENT_SECRET
、OAUTHS2S_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}¤t=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;