Toegangstoken server-naar-server genereren in App Builder-actie
De acties van App Builder kunnen met Adobe APIs moeten in wisselwerking staan die Server-aan-Server geloofsbrieven steunen en met de projecten van Adobe Developer Console verbonden zijn App Builder app wordt opgesteld.
Deze gids verklaart hoe te om een toegangstoken te produceren door Server-aan-Server geloofsbrieven voor gebruik in een actie van App Builder te gebruiken.
Adobe Developer Console-projectconfiguraties
Terwijl het toevoegen van de gewenste Adobe API aan het project van Adobe Developer Console, in vorm API stap, selecteer het Server-aan-Server authentificatietype OAuth.
Selecteer het gewenste productprofiel om het bovenstaande automatisch gemaakte serviceaccount voor integratie toe te wijzen. De machtigingen voor serviceaccounts worden dus via het productprofiel beheerd.
.env-bestand
Voeg in het bestand .env
van het App Builder-project aangepaste sleutels toe voor de OAuth Server-to-Server-referenties van het Adobe Developer Console-project. De server-aan-Server van OAuth geloofswaarden kunnen van de geloofsbrieven van het project van Adobe Developer Console worden verkregen > Server-aan-Server voor een bepaalde werkruimte.
...
OAUTHS2S_CLIENT_ID=58b23182d80a40fea8b12bc236d71167
OAUTHS2S_CLIENT_SECRET=p8e-EIRF6kY6EHLBSdw2b-pLUWKodDqJqSz3
OAUTHS2S_CECREDENTIALS_METASCOPES=AdobeID,openid,ab.manage,additional_info.projectedProductContext,read_organizations,read_profile,account_cluster.read
De waarden voor OAUTHS2S_CLIENT_ID
, OAUTHS2S_CLIENT_SECRET
, OAUTHS2S_CECREDENTIALS_METASCOPES
kunnen rechtstreeks worden gekopieerd uit het OAuth Server-to-Server-aanmeldingsscherm van het Adobe Developer Console-project.
Invoer toewijzen
Als de referentie-waarde van OAuth Server-aan-Server in het .env
dossier wordt geplaatst, moeten zij aan actiinput worden in kaart gebracht AppBuilder zodat kunnen zij in de actie zelf worden gelezen. Hiervoor voegt u items toe voor elke variabele in de ext.config.yaml
handeling inputs
in de notatie: PARAMS_INPUT_NAME: $ENV_KEY
.
Bijvoorbeeld:
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
De sleutels die onder inputs
worden gedefinieerd, zijn beschikbaar voor het params
-object dat aan de App Builder-handeling wordt geleverd.
OAuth Server-aan-Server geloofsbrieven aan toegangstoken
In de App Builder-actie zijn de OAuth Server-to-Server-referenties beschikbaar in het params
-object. Gebruikend deze geloofsbrieven kan het toegangstoken worden geproduceerd gebruikend OAuth 2.0 bibliotheken. Of u kunt de bibliotheek van de Vetch van de Knoopgebruiken om een verzoek van de POST aan het symbolische eindpunt van Adobe te maken IMS om het toegangstoken te krijgen.
In het volgende voorbeeld wordt getoond hoe u de node-fetch
-bibliotheek kunt gebruiken om een POST aan te vragen bij het Adobe IMS-tokeneindpunt om het toegangstoken op te halen.
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 Adobe 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 Adobe 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-Adobe-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;