Toegangstoken server-naar-server genereren in App Builder-actie
De acties van App Builder kunnen met Adobe APIs moeten in wisselwerking staan die OAuth 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 POST- verzoek 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-aanvraag in te dienen 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;