Dienstberechtigungen

Integrationen mit AEM as a Cloud Service müssen sich sicher bei AEM authentifizieren können. AEM Developer Console gewährt Zugriff auf Service-Anmeldedaten, die dazu dienen, externe Anwendungen, Systeme und Dienste für die programmgesteuerte Interaktion mit AEM Author- oder Publish-Diensten über HTTP zu erleichtern.

Dienstberechtigungen können ähnlich aussehen Lokale Entwicklungs-Zugriffstoken aber unterscheiden sich auf einige wesentliche Arten:

  • Service-Anmeldedaten sind not Zugriffstoken, sondern Zugangsdaten, die für retrieve Zugriffstoken.
  • Service-Anmeldedaten sind permanenter (laufen alle 365 Tage ab) und ändern sich nur dann, wenn sie widerrufen werden, während die lokalen Entwicklungs-Zugriffstoken täglich ablaufen.
  • Dienstanmeldeinformationen für eine AEM as a Cloud Service Umgebung werden einem einzelnen Benutzer AEM technischen Kontos zugeordnet, während lokale Zugriffstoken für die Entwicklung als AEM Benutzer authentifiziert werden, der das Zugriffstoken generiert hat.
  • Eine AEM as a Cloud Service Umgebung verfügt über eine Dienstberechtigung , die einem technischen Konto AEM Benutzer zugeordnet ist. Service Credentials können nicht für die Authentifizierung in derselben AEM as a Cloud Service Umgebung wie andere technische Konto-AEM verwendet werden.

Sowohl die Service-Anmeldedaten als auch die von ihnen generierten Zugriffstoken sowie die Zugriffstoken für die lokale Entwicklung sollten geheim gehalten werden, da alle drei verwendet werden können, um Zugriff auf ihre jeweiligen AEM as a Cloud Service Umgebungen zu erhalten.

Dienstanmeldeinformationen generieren

Die Generierung von Dienstanmeldeinformationen ist in zwei Schritte unterteilt:

  1. Einmalige Initialisierung von Dienstanmeldeinformationen durch einen Adobe IMS-Org-Administrator
  2. Herunterladen und Verwenden der JSON-Datei "Service Credentials"

Initialisierung von Dienstanmeldeinformationen

Dienstberechtigungen erfordern im Gegensatz zu lokalen Entwicklungs-Zugriffstoken eine einmalige Initialisierung von Ihrem Adobe Org IMS-Administrator, bevor sie heruntergeladen werden können.

Dienstanmeldeinformationen initialisieren

Dies ist eine einmalige Initialisierung pro AEM as a Cloud Service Umgebung

  1. Stellen Sie sicher, dass Sie als angemeldet sind:
    • Administrator Ihrer Adobe IMS-Organisation
    • Mitglied der Cloud Manager - Entwickler IMS-Produktprofil
    • Mitglied der AEM oder AEM Administratoren IMS-Produktprofil auf AEM-Autor
  2. Anmelden bei Adobe Cloud Manager
  3. Öffnen Sie das Programm, das die AEM as a Cloud Service Umgebung enthält, um die Einrichtung der Dienstanmeldeinformationen für
  4. Tippen Sie auf die Auslassungspunkte neben der Umgebung im Umgebungen und wählen Sie Entwicklerkonsole
  5. Tippen Sie im Integrationen tab
  6. Tippen Get Service-Anmeldedaten button
  7. Die Dienstanmeldeinformationen werden initialisiert und als JSON angezeigt

AEM Developer Console - Integrationen - Get Service Credentials

Sobald die Dienstanmeldeinformationen der AEM als Cloud Service-Umgebung initialisiert wurden, können andere AEM Entwickler in Ihrer Adobe IMS-Org sie herunterladen.

Dienstberechtigungen herunterladen

Dienstberechtigungen herunterladen

Beim Herunterladen der Dienstanmeldeinformationen werden dieselben Schritte wie bei der Initialisierung ausgeführt. Wenn die Initialisierung noch nicht erfolgt ist, wird dem Benutzer ein Fehler angezeigt, bei dem auf die Get Service-Anmeldedaten Schaltfläche.

  1. Stellen Sie sicher, dass Sie als angemeldet sind:
    • Mitglied der Cloud Manager - Entwickler IMS-Produktprofil (gewährt Zugriff auf AEM Developer Console)
      • Sandbox AEM as a Cloud Service Umgebungen erfordern dies nicht Cloud Manager - Entwickler Abo
    • Mitglied der AEM oder AEM Administratoren IMS-Produktprofil auf AEM-Autor
  2. Anmelden bei Adobe Cloud Manager
  3. Öffnen Sie das Programm mit der AEM as a Cloud Service Umgebung, in die integriert werden soll.
  4. Tippen Sie auf die Auslassungspunkte neben der Umgebung im Umgebungen und wählen Sie Entwicklerkonsole
  5. Tippen Sie im Integrationen tab
  6. Tippen Get Service-Anmeldedaten button
  7. Tippen Sie oben links auf die Schaltfläche "Herunterladen", um die JSON-Datei mit dem Wert "Service Credentials"herunterzuladen und die Datei an einem sicheren Speicherort zu speichern.
    • Wenn Service-Anmeldedaten kompromittiert sind, wenden Sie sich sofort an den Adobe Support, damit sie widerrufen werden.

Dienstanmeldeinformationen installieren

Die Dienstanmeldeinformationen geben die Details an, die zum Generieren eines JWT erforderlich sind, das gegen ein Zugriffstoken ausgetauscht wird, das zur Authentifizierung mit AEM as a Cloud Service verwendet wird. Die Dienstanmeldeinformationen müssen an einem sicheren Speicherort gespeichert werden, auf den die externen Anwendungen, Systeme oder Dienste zugreifen können, die sie für den Zugriff auf AEM verwenden. Wie und wo die Service-Anmeldedaten verwaltet werden, ist pro Kunde eindeutig.

Aus Gründen der Einfachheit übergibt dieses Tutorial die Service-Anmeldedaten über die Befehlszeile. Arbeiten Sie jedoch mit Ihrem IT Security-Team zusammen, um zu verstehen, wie Sie diese Anmeldedaten gemäß den Sicherheitsrichtlinien Ihres Unternehmens speichern und aufrufen können.

  1. Kopieren Sie die hat die JSON-Datei "Service Credentials"heruntergeladen in eine Datei mit dem Namen service_token.json im Stammverzeichnis des Projekts
    • Aber denken Sie daran, nie irgendwelche Anmeldedaten zu Git zu übertragen!

Dienstberechtigungen verwenden

Die Service Credentials, ein vollständig geformtes JSON-Objekt, sind nicht mit dem JWT- oder Zugriffstoken identisch. Stattdessen werden die Dienstanmeldeinformationen (die einen privaten Schlüssel enthalten) zum Generieren eines JWT verwendet, der mit Adobe IMS-APIs für ein Zugriffstoken ausgetauscht wird.

Service Credentials - External Application

  1. Laden Sie die Dienstanmeldeinformationen von AEM Developer Console an einen sicheren Speicherort herunter.
  2. Eine externe Anwendung muss programmgesteuert mit AEM as a Cloud Service Umgebungen interagieren
  3. Die externe Anwendung liest die Dienstanmeldeinformationen von einem sicheren Speicherort aus.
  4. Die externe Anwendung verwendet Informationen aus den Dienstanmeldeinformationen, um ein JWT-Token zu erstellen.
  5. Das JWT-Token wird an Adobe IMS gesendet, um einen Zugriffstoken auszutauschen.
  6. Adobe IMS gibt ein Zugriffstoken zurück, das für den Zugriff auf AEM as a Cloud Service verwendet werden kann
    • Für Zugriffstoken kann ein Ablauf angefordert werden. Es ist am besten, die Lebensdauer des Zugriffstokens kurz zu halten und bei Bedarf zu aktualisieren.
  7. Die externe Anwendung sendet HTTP-Anfragen an AEM as a Cloud Service, indem das Zugriffstoken als Trägertoken zum Autorisierungs-Header der HTTP-Anforderungen hinzugefügt wird
  8. AEM as a Cloud Service empfängt die HTTP-Anforderung, authentifiziert die Anforderung, führt die von der HTTP-Anforderung angeforderten Arbeiten aus und gibt eine HTTP-Antwort zurück an die externe Anwendung

Aktualisierungen der externen Anwendung

Um mit den Dienstanmeldeinformationen auf AEM as a Cloud Service zugreifen zu können, muss unsere externe Anwendung auf drei Arten aktualisiert werden:

  1. Lesen Sie in den Dienstanmeldeinformationen
    • Aus Gründen der Einfachheit werden wir diese aus der heruntergeladenen JSON-Datei lesen. In Echtzeit-Szenarien müssen jedoch Service-Anmeldeinformationen gemäß den Sicherheitsrichtlinien Ihres Unternehmens sicher gespeichert werden.
  2. Generieren eines JWT aus den Dienstanmeldeinformationen
  3. JWT gegen Zugriffstoken austauschen
    • Wenn Service-Anmeldedaten vorhanden sind, verwendet unsere externe Anwendung dieses Zugriffstoken anstelle des Zugriffstokens für die lokale Entwicklung, wenn auf AEM as a Cloud Service zugegriffen wird.

In diesem Tutorial erläutert die Adobe @adobe/jwt-auth Das npm-Modul wird verwendet, um (1) das JWT aus den Service-Anmeldedaten zu generieren und (2) es in einem einzelnen Funktionsaufruf gegen ein Zugriffstoken zu tauschen. Wenn Ihre Anwendung nicht auf JavaScript basiert, lesen Sie bitte das Beispielcode in anderen Sprachen , wie Sie ein JWT aus den Service-Anmeldedaten erstellen und es durch ein Zugriffstoken mit Adobe IMS ersetzen.

Dienstanmeldeinformationen lesen

Überprüfen Sie die getCommandLineParams() und sehen, dass wir in den JSON-Dateien mit den Dienstanmeldeinformationen den gleichen Code lesen können, der auch zum Lesen in der JSON-Datei "Local Development Access Token"verwendet wurde.

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 Austauschen eines Zugriffstokens

Sobald die Service Credentials gelesen wurden, werden sie zum Generieren eines JWT verwendet, das dann mit Adobe IMS-APIs für ein Zugriffstoken ausgetauscht wird, das dann für den Zugriff auf AEM as a Cloud Service verwendet werden kann.

Diese Beispielanwendung ist Node.js-basiert, daher empfiehlt es sich, @adobe/jwt-auth npm-Modul zur Erleichterung der (1) JWT-Generierung und (20-mal-Austausch mit Adobe IMS. Wenn Ihre Anwendung in einer anderen Sprache entwickelt wurde, lesen Sie bitte die entsprechenden Codebeispiele Informationen zum Erstellen der HTTP-Anforderung an Adobe IMS mithilfe anderer Programmiersprachen.

  1. Aktualisieren Sie die getAccessToken(..) um den Inhalt der JSON-Datei zu überprüfen und festzustellen, ob es ein lokales Entwicklungs-Zugriffstoken oder Dienstanmeldeinformationen darstellt. Dies lässt sich leicht erreichen, indem geprüft wird, ob die .accessToken -Eigenschaft, die nur für die JSON-Datei "Local Development Access Token"vorhanden ist.

    Wenn Service Credentials angegeben sind, generiert das Programm ein JWT und tauscht es mit Adobe IMS gegen ein Zugriffstoken aus. Wir werden die @adobe/jwt-auths auth(...) -Funktion, die sowohl ein JWT generiert als auch es in einem einzelnen Funktionsaufruf durch ein Zugriffstoken ersetzt. Die Parameter für auth(..) ist JSON-Objekt, das aus bestimmten Informationen besteht verfügbar über die JSON-Datei "Service Credentials", wie unten im Code beschrieben.

     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 - entweder die JSON-Datei für den lokalen Entwicklungszugriff - oder die JSON-Datei für Dienstberechtigungen - über diese Datei übergeben wird file Befehlszeilenparameter, leitet die Anwendung ein Zugriffstoken ab.

    Beachten Sie, dass die Service-Anmeldedaten zwar alle 365 Tage ablaufen, JWT und das entsprechende Zugriffstoken jedoch häufig ablaufen und vor ihrem Ablauf aktualisiert werden müssen. Dies kann mithilfe einer refresh_token bereitgestellt von Adobe IMS.

  2. Mit diesen Änderungen und der JSON-Datei für die Dienstberechtigungen, die von der AEM Developer Console heruntergeladen wurde (und zur Einfachheit, gespeichert als service_token.json derselbe Ordner wie dieser index.js), führen Sie die Anwendung aus, die den Befehlszeilenparameter ersetzt file mit service_token.jsonund aktualisieren Sie die propertyValue auf einen neuen Wert zu setzen, damit die Auswirkungen in AEM sichtbar sind.

    $ node index.js \
        aem=https://author-p1234-e5678.adobeaemcloud.com \
        folder=/wknd/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/en/adventures/napa-wine-tasting.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
    

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

    Der Grund dafür ist das Service Credentials-abgeleitete Zugriffstoken, das die Anfrage an AEM mithilfe eines automatisch erstellten technischen Kontos AEM Benutzer authentifiziert, das 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.

Zugriff in AEM konfigurieren

Das aus Dienstanmeldeinformationen abgeleitete Zugriffstoken verwendet ein technisches Konto AEM Benutzer mit Mitgliedschaft in der AEM-Benutzergruppe "Mitarbeiter".

Service Credentials - Technical Account AEM User

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 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 Dienstanmeldungen öffnen und suchen Sie nach der integration.email -Wert, der in etwa wie folgt aussehen sollte: 12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com.
  2. Melden Sie sich beim Autorendienst der entsprechenden AEM als AEM Administrator an
  3. Navigieren Sie zu Instrumente > Sicherheit > Benutzer
  4. Suchen Sie den AEM Benutzer mit dem Anmeldename in Schritt 1 identifiziert werden, und öffnen Sie die Eigenschaften
  5. Navigieren Sie zum Gruppen und fügen Sie die DAM-Benutzer Gruppe (die Schreibzugriff auf Assets hat)
  6. Tippen Speichern und schließen

Führen Sie die Anwendung erneut aus, wenn das technische Konto in AEM für Schreibberechtigungen für Assets berechtigt ist:

$ node index.js \
    aem=https://author-p1234-e5678.adobeaemcloud.com \
    folder=/wknd/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/en/adventures/napa-wine-tasting.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/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 (mit demselben Hostnamen, der in der Datei aem Befehlszeilenparameter)
  2. Navigieren Sie zum Assets > Dateien
  3. Navigieren Sie dazu zum Asset-Ordner, der durch die folder Befehlszeilenparameter, z. B. WKND > englisch > Abenteuer > Napa Weinverkostung
  4. Öffnen Sie die Eigenschaften für alle Assets im Ordner
  5. Navigieren Sie zum Erweitert tab
  6. Überprüfen Sie den Wert der aktualisierten Eigenschaft, z. B. Copyright , die der aktualisierten metadata/dc:rights JCR-Eigenschaft, die jetzt den Wert widerspiegelt, der im propertyValue -Parameter, 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 sowie ein produktionsfähiges Service-to-Service-Zugriffstoken!

Auf dieser Seite