Service-Anmeldeinformationen

Integrationen mit Adobe Experience Manager (AEM) as a Cloud Service müssen in der Lage sein, sich sicher beim AEM-Service zu authentifizieren. Die Developer Console von AEM gewährt Zugriff auf Service-Anmeldeinformationen, die es externen Anwendungen, Systemen und Services ermöglichen, programmatisch mit AEM-Autoren- oder -Veröffentlichungs-Services über HTTP zu interagieren.

AEM kann mit anderen Adobe-Produkten mithilfe von über Adobe Developer Console verwaltetes S2S OAuth integriert werden. Bei benutzerdefinierten Integrationen mit Dienstkonten werden JWT-Anmeldedaten in der AEM Developer Console verwendet und verwaltet.

Service-Anmeldeinformationen sehen zwar ähnlich aus wie Zugriffstoken für die lokale Entwicklung, unterscheiden sich aber in einigen wichtigen Punkten:

  • Service-Anmeldeinformationen sind mit technischen Konten verbunden. Für ein technisches Konto können mehrere Service-Anmeldeinformationen aktiv sein.
  • Service-Anmeldeinformationen sind keine Zugangstoken, sondern Anmeldeinformationen, die verwendet werden, um Zugangstoken zu erhalten.
  • Service-Anmeldeinformationen sind dauerhafter (ihre Zertifikate laufen nur alle 365 Tage ab) und ändern sich nicht, es sei denn, sie werden widerrufen, während die Zugriffstoken für die lokale Entwicklung täglich ablaufen.
  • Service-Anmeldeinformationen für eine AEM as a Cloud Service-Umgebung werden einer oder einem einzelnen technischen AEM-Konto-Benutzenden zugeordnet, während ein Zugriffstoken für die lokale Entwicklung sich als die Person authentifiziert, die AEM benutzt und das Zugriffstoken erstellt hat.
  • Eine AEM as a Cloud Service-Umgebung kann bis zu zehn technische Konten haben, jedes mit seinen eigenen Service-Anmeldeinformationen, die jeweils einer oder einem separaten technischen Konto AEM-Benutzer zugeordnet sind.

Sowohl Service-Anmeldeinformationen und die von ihnen erzeugten Zugriffstoken als auch Zugriffstoken für die lokale Entwicklung sollten geheim gehalten werden. Alle drei können nämlich verwendet werden, um Zugang zu ihrer jeweiligen AEM as a Cloud Service-Umgebung zu erhalten.

Generieren von Service-Anmeldeinformationen

Die Generierung von Service-Anmeldeinformationen ist in zwei Schritte unterteilt:

  1. Einmalige Erstellung eines technischen Kontos durch Adobe IMS Org-Administrierende
  2. Herunterladen und Verwenden der JSON mit den Service-Anmeldeinformationen des technischen Kontos

Erstellen eines technischen Kontos

Anders als Zugriffstoken für die lokale Entwicklung erfordern Service-Anmeldeinformationen die Erstellung eines technischen Kontos durch Adobe Org IMS-Administrierende, bevor sie heruntergeladen werden können. Für jeden Client, der programmtechnischen Zugriff auf AEM benötigt, sollten separate technische Konten eingerichtet werden.

Erstellen eines technischen Kontos

Technische Konten werden einmal erstellt, die privaten Schlüssel, die zur Verwaltung der mit dem technischen Konto verbundenen Service-Anmeldeinformationen verwendet werden, können über einen längeren Zeitraum verwaltet werden. So müssen zum Beispiel neue private Schlüssel/Service-Anmeldeinformationen generiert werden, bevor der aktuelle private Schlüssel abläuft, damit Benutzende der Service-Anmeldeinformationen ununterbrochenen Zugriff haben.

  1. Stellen Sie sicher, dass Sie wie folgt angemeldet sind:

    • Admin des Adobe IMS-Organisationssystems
    • Mitglied beim IMS-Produktprofil der AEM-Administrierenden auf AEM Author
  2. Melden Sie sich bei Adobe Cloud Manager an

  3. Öffnen Sie das Programm, das die AEM as a Cloud Service-Umgebung enthält, um die Einrichtung der Service-Anmeldeinformationen dafür zu integrieren.

  4. Tippen Sie auf die Auslassungspunkte neben der Umgebung im Abschnitt Umgebungen und wählen Sie Developer Console.

  5. Tippen Sie auf die Registerkarte Integrationen.

  6. Tippen Sie auf die Registerkarte Technische Konten.

  7. Tippen Sie auf Neues technisches Konto erstellen.

  8. Die Service-Anmeldeinformationen des technischen Kontos werden initialisiert und als JSON angezeigt

AEM Developer Console – Integrationen – Erhalten von Service-Anmeldeinformationen

Sobald die Service-Anmeldeinformationen der AEM as a Cloud Service-Umgebung initialisiert wurden, können andere AEM-Entwicklerinnen und -Entwickler in Ihrer Adobe IMS-Organisation sie herunterladen.

Herunterladen von Service-Anmeldeinformationen

Herunterladen von Service-Anmeldeinformationen

Das Herunterladen der Service-Anmeldeinformationen erfolgt in ähnlichen Schritten wie die Initialisierung.

  1. Stellen Sie sicher, dass Sie wie folgt angemeldet sind:

    • Administrierende der Adobe IMS-Organisation
    • Mitglied beim IMS-Produktprofil der AEM-Administrierenden auf AEM Author
  2. Melden Sie sich bei Adobe Cloud Manager an.

  3. Öffnen Sie das Programm mit der AEM as a Cloud Service Umgebung, mit der integriert werden soll

  4. Tippen Sie auf die Auslassungspunkte neben der Umgebung im Abschnitt Umgebungen und wählen Sie Developer Console aus

  5. Tippen Sie auf die Registerkarte Integrationen.

  6. Tippen Sie auf die Registerkarte Technische Konten

  7. Erweitern Sie das zu verwendende Technische Konto

  8. Erweitern Sie den privaten Schlüssel, dessen Service-Anmeldeinformationen heruntergeladen werden, und überprüfen Sie, ob der Status Aktiv ist

  9. Tippen Sie auf die Auslassungspunkte > Ansicht des privaten Schlüssels, um die JSON-Dienstanmeldeinformationen anzuzeigen.

  10. Tippen Sie auf die Herunterladen-Schaltfläche in der linken oberen Ecke, um die JSON-Datei herunterzulagen, die die Dienstanmeldeinformationen enthält, und speichern Sie die Datei an einem sicheren Speicherort.

Installieren der Dienstanmeldeinformationen

Die Dienstanmeldeinformationen enthalten die Details, die erforderlich sind, um ein JWT zu generieren. Dieses wird durch ein Zugriffs-Token ersetzt, das zur Authentifizierung bei AEM as a Cloud Service verwendet wird. Die Dienstanmeldeinformationen müssen an einem sicheren Speicherort gespeichert werden, auf den die externen Anwendungen, Systeme oder Services zugreifen können, die sie für den Zugriff auf AEM verwenden. Wie und wo die Dienstanmeldeinformationen verwaltet werden, variiert von Kunde zu Kunde.

Der Einfachheit halber werden die Dienstanmeldeinformationen in diesem Tutorial über die Befehlszeile übergeben. Bestimmen Sie gemeinsam mit Ihrem IT-Sicherheits-Team, wie Sie diese Anmeldeinformationen gemäß den Sicherheitsrichtlinien Ihres Unternehmens speichern und aufrufen können.

  1. Kopieren Sie die JSON mit den heruntergeladenen Dienstanmeldeinformationen in eine Datei mit dem Namen service_token.json im Stammverzeichnis des Projekts.
    • Denken Sie daran, Anmeldeinformationen niemals an Git zu übertragen!

Verwenden von Dienstanmeldeinformationen

Die Dienstanmeldeinformationen, ein vollständig geformtes JSON-Objekt, sind weder mit dem JWT noch mit dem Zugriffs-Token identisch. Stattdessen werden die Dienstanmeldeinformationen (die einen privaten Schlüssel enthalten) verwendet, um ein JWT zu generieren, das in Adobe IMS-APIs gegen ein Zugriffs-Token ausgetauscht wird.

Dienstanmeldeinformationen – Externe Anwendung

  1. Laden Sie die Dienstanmeldeinformationen von der AEM Developer Console an einen sicheren Speicherort herunter.
  2. Die externe Anwendung muss programmgesteuert mit der AEM as a Cloud Service-Umgebung interagieren.
  3. Die externe Anwendung liest die Dienstanmeldeinformationen über einen sicheren Speicherort ein.
  4. Die externe Anwendung verwendet die Dienstanmeldeinformationen, um ein JWT-Token zu erstellen.
  5. Das JWT-Token wird an Adobe IMS gesendet, wo es gegen ein Zugriffs-Token eingetauscht wird.
  6. Adobe IMS gibt ein Zugriffs-Token zurück, das für den Zugriff auf AEM as a Cloud Service verwendet werden kann.
    • Zugriffs-Token können die Ablaufzeit nicht ändern.
  7. Die externe Anwendung sendet HTTP-Anfragen an AEM als ein Cloud Service. Dabei wird das Zugriffs-Token zur Autorisierungs-Kopfzeile der HTTP-Anfragen als Bearer-Token hinzugefügt.
  8. AEM as a Cloud Service empfängt die HTTP-Anfrage, authentifiziert sie, führt die von ihr angeforderte Aufgabe aus und gibt eine HTTP-Antwort an die externe Anwendung zurück.

Aktualisierungen der externen Anwendung

Damit Sie auf AEM as a Cloud Service unter Verwendung der Dienstanmeldeinformationen zugreifen können, muss die externe Anwendung auf drei Arten aktualisiert werden:

  1. Einlesen der Dienstanmeldeinformationen
  • Der Einfachheit halber werden die Dienstanmeldeinformationen hier aus der heruntergeladenen JSON-Datei gelesen. In realen Anwendungsszenarien müssen Dienstanmeldeinformationen jedoch gemäß den Sicherheitsrichtlinien Ihres Unternehmens sicher gespeichert werden.
  1. JWT aus den Dienstanmeldeinformationen generieren
  2. JWT durch ein Zugriffs-Token ersetzen
  • Wenn Dienstanmeldeinformationen vorhanden sind, verwendet die externe Anwendung beim Zugriff auf AEM as a Cloud Service dieses Zugriffs-Token anstelle des Zugriffs-Tokens für die lokale Entwicklung.

In diesem Tutorial wird das npm-Modul von Adobe @adobe/jwt-auth verwendet, um in einem einzigen Funktionsaufruf (1) das JWT auf Basis der Dienst-Anmeldeinformationen zu generieren und (2) es gegen ein Zugriffs-Token einzutauschen. Wenn Ihre Anwendung nicht auf JavaScript basiert, prüfen Sie bitte den Muster-Code in anderen Sprachen, um zu sehen, wie ein JWT aus den Dienstanmeldeinformationen erstellt und gegen ein Zugriffs-Token für Adobe IMS eingetauscht werden kann.

Lesen der Dienstanmeldeinformationen

Sehen Sie sich getCommandLineParams() an, um herauszufinden, wie derselbe Code zum Lesen der Dienstanmeldeinformations-JSON-Datei und zum Einlesen des JSON-Zugriffs-Tokens für die lokale Entwicklung verwendet wird.

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;
}

Erstellen eines JWT und Austausch gegen ein Zugriffs-Token

Wenn die Dienstanmeldeinformationen gelesen sind, werden sie zum Generieren eines JWT verwendet, das dann über Adobe IMS-APIs gegen ein Zugriffs-Token ausgetauscht wird. Mit diesem Zugriffs-Token können Sie dann auf AEM as a Cloud Service zugreifen.

Diese Beispielanwendung basiert auf Node.js. Daher empfiehlt es sich, das npm-Modul @adobe/jwt-auth zu verwenden, um (1) die JWT-Generierung und (2) den Austausch mit Adobe IMS zu vereinfachen. Wenn Ihre Anwendung in einer anderen Sprache entwickelt wurde, sehen Sie sich in den entsprechenden Code-Beispielen an, wie die HTTP-Anfrage an Adobe IMS mithilfe anderer Programmiersprachen erstellt wird.

  1. Aktualisieren Sie getAccessToken(..), um den Inhalt der JSON-Datei zu überprüfen und festzustellen, ob es sich um ein lokales Entwicklungs-Zugriffs-Token oder um Dienstanmeldeinformationen handelt. Dies können Sie leicht feststellen, indem Sie prüfen, ob die Eigenschaft .accessToken vorhanden ist, was nur bei JSON-Zugriffs-Token für die lokale Entwicklung der Fall ist.

    Wenn Dienstanmeldeinformationen bereitgestellt werden, generiert die Anwendung ein JWT und tauscht es über Adobe IMS gegen ein Zugriffstoken aus. Verwenden Sie die auth(...)-Funktion von @adobe/jwt-auth, die ein JWT generiert und in einem einzigen Funktionsaufruf gegen ein Zugriffs-Token eintauscht. Bei den Parametern für die auth(..)-Methode handelt es sich um ein JSON-Objekt, das aus bestimmten Informationen besteht, die in den JSON-Datei Dienstanmeldeinformationen verfügbar sind (siehe folgenden 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;
     }
 }
Je nachdem, welche JSON-Datei über den Befehlszeilenparameter „file“ übergeben wird – entweder das Zugriffs-Token-JSON für die lokale Entwicklung oder das Dienstanmeldeinformationen-JSON –, leitet die Anwendung jetzt ein Zugriffs-Token ab.

Beachten Sie, dass die Dienstanmeldeinformationen zwar nur alle 365 Tage ablaufen, das JWT und das entsprechende Zugriffs-Token jedoch häufiger ablaufen und vor ihrem Ablauf aktualisiert werden müssen. Dies kann mit einem „refresh_token“ [bereitgestellt von Adobe IMS](https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/OAuth/OAuth.md#access-tokens) erfolgen.
  1. Mit diesen Änderungen wurde die JSON-Datei für Dienstanmeldeinformationen von der AEM Developer Console heruntergeladen und der Einfachheit halter im selben Ordner wie index.js als service_token.json gespeichert. Lassen Sie uns nun die Anwendung ausführen, indem wir den Befehlszeilenparameter file durch service_token.json ersetzen und propertyValue in einen neuen Wert ändern, damit die Auswirkungen in AEM sichtbar werden.

    code language-shell
    $ 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
    

    Die Ausgabe an das Terminal sieht wie folgt aus:

    code language-shell
    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
    

    Die Zeilen 403 – Verboten zeigen Fehler in den HTTP-API-Aufrufen an AEM as a Cloud Service an. Diese „403 Forbidden“-Fehler treten auf, wenn versucht wird, die Metadaten der Assets zu aktualisieren.

    Der Grund dafür ist das von den Service-Anmeldeinformationen abgeleitete Zugriffstoken, das die Anfrage an AEM mithilfe eines automatisch erstellten technischen Kontos AEM-Benutzer authentifiziert, der standardmäßig nur Lesezugriff hat. Um der Anwendung Schreibzugriff auf AEM zu gewähren, muss das technische Konto AEM-Benutzer, das mit dem Zugriffstoken verknüpft ist, in AEM die Berechtigung erhalten.

Konfigurieren des Zugriffs in AEM

Das aus Service-Anmeldeinformationen abgeleitete Zugriffstoken verwendet ein technisches Konto AEM-Benutzer mit Mitgliedschaft in der AEM-Benutzergruppe Mitwirkende.

Service-Anmeldeinformationen – Technisches Konto AEM-Benutzer

Sobald das technische Konto AEM-Benutzer in AEM vorhanden ist (nach der ersten HTTP-Anfrage mit dem Zugriffstoken), können die Berechtigungen dieses AEM-Benutzers wie für andere AEM-Benutzer verwaltet werden.

  1. Suchen Sie zunächst den AEM-Anmeldenamen des technischen Kontos, indem Sie die von AEM Developer Console heruntergeladene JSON für Service-Anmeldeinformationen öffnen und nach dem Wert von integration.email suchen, der in etwa wie folgt aussehen sollte: 12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com.
  2. Melden Sie sich beim Autoren-Service der entsprechenden AEM-Umgebung als AEM-Administrator an
  3. Navigieren Sie zu Tools > Sicherheit > Benutzer
  4. Suchen Sie den AEM-Benutzer mit dem Anmeldenamen, der in Schritt 1 identifiziert wurde, und öffnen Sie dessen Eigenschaften
  5. Navigieren Sie zu Gruppen und fügen Sie die Gruppe der DAM-Benutzer (die Schreibzugriff auf Assets hat) hinzu
    • Sehen Sie sich die Liste der von AEM bereitgestellten Benutzergruppen an, zu denen Sie die Dienstbenutzerin bzw. den Dienstbenutzer hinzufügen müssen, um die optimalen Berechtigungen zu erhalten. Wenn keine der von AEM bereitgestellten Benutzergruppen ausreicht, erstellen Sie eine eigene und fügen Sie die entsprechenden Berechtigungen hinzu.
  6. Klicken Sie auf Speichern und schließen

Führen Sie mit dem technischen Konto, das in AEM über Schreibberechtigungen für Assets verfügt, die Anwendung erneut aus:

$ 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

Die Ausgabe an das Terminal sieht wie folgt aus:

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

Überprüfen der Änderungen

  1. Melden Sie sich bei der AEM as a Cloud Service-Umgebung an, die aktualisiert wurde (unter Verwendung desselben Host-Namens, der im aem-Befehlszeilenparameter angegeben wurde)
  2. Navigieren Sie zu Assets > Dateien
  3. Navigieren Sie dazu zum Asset-Ordner, der durch die folder-Befehlszeilenparameter, z. B. WKND > English > Adventure > Napa Wine Tasting festgelegt wurde
  4. Öffnen Sie die Eigenschaften für alle Assets im Ordner
  5. Wechseln Sie zur Registerkarte Erweitert
  6. Überprüfen Sie den Wert der aktualisierten Eigenschaft, z. B. Copyright, die der aktualisierten JCR-Eigenschaft metadata/dc:rights zugeordnet ist, welche jetzt den im Parameter propertyValue enthaltenen Wert widerspiegelt, z. B. WKND – Eingeschränkte Verwendung

WKND – Aktualisierung von Metadaten mit eingeschränkter Verwendung

Herzlichen Glückwunsch!

Nachdem wir nun programmatisch auf AEM as a Cloud Service zugegriffen haben, verwenden wir ein lokales Entwicklungs-Zugriffstoken und ein produktionsfähiges Service-to-Service-Zugriffstoken!

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4