Les intégrations à Adobe Experience Manager (AEM) as a Cloud Service doivent pouvoir s’authentifier en toute sécurité auprès du service AEM. La Developer Console d’AEM accorde l’accès aux informations d’identification de service, qui sont utilisées pour aider les applications, systèmes et services externes à interagir par programmation avec les services de création et de publication via HTTP.
Bien que les informations d’identification de service puissent apparaître similaires aux jetons d’accès au développement local, elles sont différentes de plusieurs manières importantes :
Les informations d’identification de service et les jetons d’accès qu’elles génèrent, ainsi que les jetons d’accès au développement local, doivent être gardés secrets. En effet, les trois peuvent être utilisés pour obtenir l’accès à leur environnement AEM as a Cloud Service respectif.
La génération des informations d’identification de service est divisée en deux étapes :
Contrairement aux jetons d’accès au développement local, les informations d’identification de service requièrent la création d’un compte technique par l’administration de l’organisation Adobe IMS avant de pouvoir être téléchargées. Des comptes techniques distincts doivent être créés pour chaque client ou cliente qui nécessite un accès programmatique à AEM.
Les comptes techniques sont créés une seule fois, mais les clés privées utilisées pour gérer les informations d’identification de service associées au compte technique peuvent être gérées au fil du temps. Par exemple, les nouvelles informations d’identification de service ou de clé privée doivent être générées avant l’expiration de la clé privée actuelle, afin de permettre un accès ininterrompu à une personne utilisatrice des informations d’identification de service.
Une fois les informations d’identification de service de l’environnement AEM as a Cloud Service initialisées, d’autres personnes développeuses d’AEM de votre organisation Adobe IMS peuvent les télécharger.
Le téléchargement des informations d’identification de service suit des étapes similaires à l’initialisation.
Les informations d’identification de service fournissent les détails nécessaires à la génération d’un jeton JWT, qui est échangé contre un jeton d’accès utilisé pour s’authentifier avec AEM as a Cloud Service. Les informations d’identification de service doivent être stockées dans un emplacement sécurisé accessible par les systèmes, services ou applications externes qui les utilisent pour accéder à AEM. Le mode et l’emplacement de gestion des informations d’identification du service sont uniques pour chaque personne cliente.
Pour plus de simplicité, ce tutoriel transmet les informations d’identification de service via la ligne de commande. Toutefois, travaillez avec votre équipe de sécurité informatique pour comprendre comment stocker ces informations d’identification et y accéder conformément aux directives de sécurité de votre organisation.
service_token.json
à la racine du projet.
Les informations d’identification de service consistent en un objet JSON entièrement formé et diffèrent du jeton JWT et du jeton d’accès. Les informations d’identification de service (qui contiennent une clé privée) sont plutôt utilisées pour générer un jeton JWT qui est échangé avec les API d’Adobe IMS contre un jeton d’accès.
Pour accéder à AEM as a Cloud Service à l’aide des informations d’identification de service, l’application externe doit être mise à jour de trois façons :
Dans ce tutoriel, le module npm @adobe/jwt-auth
d’Adobe est utilisé pour 1), générer le jeton JWT à partir des informations d’identification de service et 2), l’échanger contre un jeton d’accès, dans un seul appel de fonction. Si votre application n’est pas basée sur JavaScript, consultez l’exemple de code dans d’autres langages pour savoir comment créer un jeton JWT à partir des informations d’identification de service et l’échanger contre un jeton d’accès avec Adobe IMS.
Consultez getCommandLineParams()
pour savoir comment le fichier JSON d’informations d’identification de service est lu à l’aide du même code que celui utilisé pour lire dans le JSON du jeton d’accès au développement local.
function getCommandLineParams() {
...
// Read in the credentials from the provided JSON file
// Since both the Local Development Access Token and Service Credentials files are JSON, this same approach can be re-used
if (parameters.file) {
parameters.developerConsoleCredentials = JSON.parse(fs.readFileSync(parameters.file));
}
...
return parameters;
}
Une fois les informations d’identification de service lues, elles sont utilisées pour générer un jeton JWT qui est ensuite échangé avec les API d’Adobe IMS contre un jeton d’accès. Ce jeton d’accès peut ensuite être utilisé pour accéder à AEM as a Cloud Service.
Cet exemple d’application est basé sur Node.js. Il est donc préférable d’utiliser le module npm @adobe/jwt-auth pour faciliter 1), la génération du jeton JWT et 2), l’échange avec Adobe IMS. Si votre application est développée à l’aide d’un autre langage, consultez les exemples de code appropriés sur la manière de créer la requête HTTP à Adobe IMS à l’aide d’autres langages de programmation.
Mettez à jour le getAccessToken(..)
pour examiner le contenu du fichier JSON et déterminer s’il représente un jeton d’accès au développement local ou des informations d’identification de service. Pour ce faire, il suffit de vérifier l’existence de la propriété du .accessToken
, qui n’existe que pour le JSON du jeton d’accès au développement local.
Si les informations d’identification de service sont fournies, l’application génère un jeton JWT et l’échange avec Adobe IMS contre un jeton d’accès. Utilisez la fonction auth(...)
de @adobe/jwt-auth qui génère un jeton JWT et l’échange contre un jeton d’accès dans un appel de fonction unique. Les paramètres de la méthode auth(..)
sont un objet JSON composé d’informations spécifiques disponible dans le fichier JSON des informations d’identification du service, comme indiqué ci-dessous dans le code.
async function getAccessToken(developerConsoleCredentials) {
if (developerConsoleCredentials.accessToken) {
// This is a Local Development access token
return developerConsoleCredentials.accessToken;
} else {
// This is the Service Credentials JSON object that must be exchanged with Adobe IMS for an access token
let serviceCredentials = developerConsoleCredentials.integration;
// Use the @adobe/jwt-auth library to pass the service credentials generated a JWT and exchange that with Adobe IMS for an access token.
// If other programming languages are used, please see these code samples: https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/JWT/samples/samples.md
let { access_token } = await auth({
clientId: serviceCredentials.technicalAccount.clientId, // Client Id
technicalAccountId: serviceCredentials.id, // Technical Account Id
orgId: serviceCredentials.org, // Adobe IMS Org Id
clientSecret: serviceCredentials.technicalAccount.clientSecret, // Client Secret
privateKey: serviceCredentials.privateKey, // Private Key to sign the JWT
metaScopes: serviceCredentials.metascopes.split(','), // Meta Scopes defining level of access the access token should provide
ims: `https://${serviceCredentials.imsEndpoint}`, // IMS endpoint used to obtain the access token from
});
return access_token;
}
}
En fonction du fichier JSON transmis par le biais du paramètre de ligne de commande « file » (le fichier JSON du jeton d’accès au développement local ou le fichier JSON des informations d’identification du service), l’application obtient un jeton d’accès.
N’oubliez pas que même si les informations d’identification du service expirent tous les 365 jours, le jeton JWT et le jeton d’accès correspondant expirent fréquemment et doivent être actualisés avant leur expiration. Pour ce faire, utilisez la commande « refresh_token » [fournie par Adobe IMS](https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/OAuth/OAuth.md#access-tokens).
Une fois ces modifications en place, le fichier JSON des informations d’identification du service est téléchargé depuis la Developer Console d’AEM et, pour plus de simplicité, enregistré sous service_token.json
dans le même dossier que index.js
. À présent, exécutez l’application en remplaçant le paramètre de ligne de commande file
par service_token.json
et en mettant à jour la propertyValue
vers une nouvelle valeur afin que les effets soient visibles dans AEM.
$ node index.js \
aem=https://author-p1234-e5678.adobeaemcloud.com \
folder=/wknd-shared/en/adventures/napa-wine-tasting \
propertyName=metadata/dc:rights \
propertyValue="WKND Restricted Use" \
file=service_token.json
La sortie vers le terminal ressemble à ce qui suit :
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
Les lignes 403 Interdit signalent les erreurs dans les appels d’API HTTP vers AEM as a Cloud Service. Ces erreurs 403 d’interdiction se produisent lors de la tentative de mise à jour des métadonnées des ressources.
Cela s’explique par le fait que le jeton d’accès dérivé des informations d’identification du service authentifie la demande d’AEM à l’aide d’un profil d’utilisation de compte technique AEM créé automatiquement qui, par défaut, dispose uniquement d’un accès en lecture seule. Pour permettre l’accès en écriture de l’application à AEM, le profil d’utilisation du compte technique AEM associé au jeton d’accès doit bénéficier de l’autorisation dans AEM.
Le jeton d’accès dérivé des informations d’identification du service utilise un profil d’utilisation de compte technique AEM membre du groupe d’utilisateurs Contributeurs d’AEM.
Une fois que le profil d’utilisation de compte technique AEM existe dans AEM (après la première requête HTTP avec le jeton d’accès), les autorisations d’utilisation peuvent être gérées de la même manière que celles des autres utilisateurs et utilisatrices d’AEM.
integration.email
qui doit ressembler à : 12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com
.Maintenant que le compte technique dispose des autorisations d’écriture sur les ressources dans AEM, réexécutez l’application :
$ node index.js \
aem=https://author-p1234-e5678.adobeaemcloud.com \
folder=/wknd-shared/en/adventures/napa-wine-tasting \
propertyName=metadata/dc:rights \
propertyValue="WKND Restricted Use" \
file=service_token.json
La sortie vers le terminal ressemble à ce qui suit :
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
aem
).folder
, par exemple WKND > English > Adventures > Napa Wine Tasting.metadata/dc:rights
mise à jour. Elle reflète désormais la valeur fournie dans le paramètre propertyValue
, par exemple, Utilisation restreinte de WKND.Vous venez d’accéder par programmation à AEM as a Cloud Service à l’aide d’un jeton d’accès au développement local et d’un jeton d’accès service à service pour la production.