Les intégrations avec Adobe Experience Manager (AEM) as a Cloud Service doivent pouvoir s’authentifier en toute sécurité au service AEM. AEM Developer Console accorde l’accès aux informations d’identification du service, qui sont utilisées pour faciliter les applications, systèmes et services externes pour interagir par programmation avec les services AEM Author ou Publish sur HTTP.
Les informations d’identification du service peuvent apparaître similaires. Jetons d’accès au développement local mais sont différents de plusieurs manières clés :
Les informations d’identification du service et les jetons d’accès qu’ils génèrent, ainsi que les jetons d’accès au développement local, doivent être gardés secrets. Comme les trois peuvent être utilisés pour obtenir, l'accès à leur environnement as a Cloud Service respectif AEM.
La génération des informations d’identification du service est divisée en deux étapes :
Contrairement aux jetons d’accès au développement local, les informations d’identification du service requièrent la création d’un compte technique par un administrateur IMS de l’organisation d’Adobe avant de pouvoir les télécharger. Des comptes techniques distincts doivent être créés pour chaque client qui nécessite un accès programmatique à AEM.
Les comptes techniques sont créés une seule fois, mais les clés privées utilisent pour gérer les informations d’identification du service associées au compte technique. Par exemple, les nouvelles informations d’identification de clé privée/service doivent être générées avant l’expiration de la clé privée actuelle, afin de permettre un accès ininterrompu à un utilisateur des informations d’identification du service.
Une fois l’AEM comme informations d’identification de service de l’environnement de Cloud Service initialisé, d’autres développeurs AEM de votre organisation Adobe IMS peuvent les télécharger.
Le téléchargement des informations d’identification du service suit les étapes similaires à l’initialisation.
Les informations d’identification du 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 du service doivent être stockées dans un emplacement sécurisé accessible par les applications, systèmes ou services externes qui l’utilisent pour accéder à AEM. Le mode et l’emplacement de gestion des informations d’identification du service sont uniques par client.
Pour plus de simplicité, ce tutoriel transmet les informations d’identification du service dans 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 entreprise.
service_token.json
à la racine du projet
Les informations d’identification du service, un objet JSON entièrement formé, ne sont pas identiques au JWT ni au jeton d’accès. Les informations d’identification du service (qui contiennent une clé privée) sont utilisées pour générer un jeton d’accès JWT qui est échangé avec les API Adobe IMS.
Pour accéder à AEM as a Cloud Service à l’aide des informations d’identification du service, l’application externe doit être mise à jour de trois façons :
Dans ce tutoriel, Adobe @adobe/jwt-auth
Le module npm est utilisé pour (1) générer le JWT à partir des informations d’identification du 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, veuillez consulter la section exemple de code dans d’autres langues pour savoir comment créer un jeton JWT à partir des informations d’identification du service et l’échanger contre un jeton d’accès avec Adobe IMS.
Consultez la section getCommandLineParams()
voyez donc comment le fichier JSON Informations d’identification du service est lu en utilisant le même code que celui utilisé pour lire dans le JSON JSON 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 du service lues, elles sont utilisées pour générer un jeton d’accès JWT qui est ensuite échangé avec les API Adobe IMS. 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 @adobe/jwt-auth module npm pour faciliter la génération (1) JWT et l’échange (20) avec Adobe IMS. Si votre application est développée à l’aide d’une autre langue, veuillez consulter les exemples de code appropriés ; sur la manière de construire la requête HTTP vers 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 du service. Pour ce faire, il suffit de vérifier l’existence de la variable .accessToken
qui n’existe que pour le JSON JSON du jeton d’accès au développement local.
Si les informations d’identification du service sont fournies, l’application génère un JWT et l’échange avec Adobe IMS pour un jeton d’accès. Utilisez la variable @adobe/jwt-auth's auth(...)
qui génère un JWT et l’échange pour un jeton d’accès dans un appel de fonction unique. Les paramètres de auth(..)
sont Objet JSON composé d’informations spécifiques disponible à partir du JSON des informations d’identification du service, comme décrit 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;
}
}
Désormais, en fonction du fichier JSON transmis par le biais de ce paramètre de ligne de commande, soit le JSON JSON du jeton d’accès au développement local, soit le 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 d’accès JWT et le jeton d’accès correspondant expirent fréquemment et doivent être actualisés avant expiration. Pour ce faire, utilisez un "refresh_token" [fourni 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 a été téléchargé à partir d’AEM Developer Console et, pour plus de simplicité, enregistré sous la forme service_token.json
dans le même dossier que celui-ci index.js
. Maintenant, exécutez l’application en remplaçant le paramètre de ligne de commande file
avec service_token.json
et de mettre à jour la variable propertyValue
à 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
Le 403 - Interdit lignes, indiquez les erreurs dans les appels API HTTP à AEM as a Cloud Service. Ces erreurs 403 interdites 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 compte technique créé automatiquement AEM utilisateur qui, par défaut, dispose uniquement d’un accès en lecture. Pour permettre l’accès en écriture de l’application à AEM, l’utilisateur du compte technique AEM associé au jeton d’accès doit se voir accorder l’autorisation dans l’.
Le jeton d’accès dérivé des informations d’identification du service utilise un compte technique AEM utilisateur qui est membre du Contributeurs AEM groupe d’utilisateurs.
Une fois que le compte technique AEM utilisateur existe dans AEM (après la première requête HTTP avec le jeton d’accès), les autorisations de cet utilisateur peuvent être gérées de la même manière que les autres utilisateurs .
integration.email
qui doit ressembler à : 12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com
.Avec le compte technique autorisé dans AEM à disposer d’autorisations d’écriture sur les ressources, 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
paramètre de ligne de commande)folder
paramètre de ligne de commande, par exemple WKND > Anglais > Aventures > Goûts du vin de Napametadata/dc:rights
Propriété JCR, qui reflète désormais la valeur fournie dans la propriété propertyValue
par exemple, Utilisation restreinte de WKNDMaintenant que nous avons accédé 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 prêt pour la production !