New Feature Preview: JWT-Authentifizierung für REST API und GraphQL in v3.2

New Feature Preview: JWT-Authentifizierung für REST API und GraphQL in v3.2

Gut entwickelte Headless-Fähigkeiten sind ein starkes Merkmal der Ibexa DXP. REST API und GraphQL, die "out of the box" verfügbar sind, sind leistungsstark, schnell und zuverlässig und bieten Zugriff auf alle Kernfunktionen des Produkts. Diese APIs werden von Entwicklern häufig zur Erstellung eleganter Front-End-JavaScript-Einzelseitenanwendungen, zur Verbindung eigenständiger mobiler Anwendungen sowie für viele andere Fälle verwendet.

Der Technologiemarkt verändert sich rasant, insbesondere wenn es um Authentifizierung, Autorisierung oder allgemein um die Kommunikation zwischen verschiedenen Diensten geht. 

Aufgrund ihrer Natur ist die Authentifizierung immer ein wenig heikel. Die breite Palette verfügbarer Lösungen macht es nicht einfacher, da es nicht möglich wäre, sie alle in Ibexa's DXP zu überwachen, zu implementieren und auszuliefern.  

Wir sind also stolz darauf, einen Schritt nach vorn zu machen und eine neue Methode der Authentifizierung gegen unsere Public Headless APIs einzuführen. Bisher war es nur möglich, auf sie entweder über sitzungsbasierte Authentifizierung oder HTTP-Basisauthentifizierung zuzugreifen. Mit der Version 3.2 führen wir eine neue, moderne Authentifizierungsmethode ein - JSON Web Token (JWT). JWT ist eine sichere, schnelle und anerkannt einfache Technologie, die es schon seit einiger Zeit gibt und die in der modernen Webentwicklungswelt weit verbreitet ist.

JSON Web Token - JWT

JWT ist ein Mechanismus, der im Zusammenhang mit Web-APIs, aber auch im weiteren Sinne in den allgemeinen Begriffen Web- und mobile Anwendungen verwendet wird. Anstelle der Verwendung eines traditionellen Session-Cookies oder HTTP-basierter Auth-Header wird bei dieser Methode ein eindeutiges Token generiert, das für jede einzelne Anfrage, die eine Berechtigungsprüfung erfordert, verwendet werden muss. Ein solches Token hat seine TTL (Time To Live), nach der es nicht mehr verwendbar ist und ein neues Token erneut generiert werden muss.  

Die Berechtigungsnachweise müssen nur einmal an die Anwendung gesendet werden, wenn ein neues Token angefordert wird. Einmal generiert, reicht das Token allein aus, um sich erfolgreich im System zu authentifizieren.

Weitere Informationen finden sich unter JWT.io

Konfiguration in Ibexa DXP

In v3.2 der Ibexa DXP ist die JWT-Authentifizierung ein Opt-in-Feature. Sie muss also aktiviert werden, um verfügbar zu sein.

Da es bisher ausschließlich für die Authentifizierung in Page Builder verwendet wurde, ist die Funktion bereits installiert. Auch sollten bereits einige Konfigurationen im System verfügbar sein. Einige grundlegende Konfigurationen sind in der Datei config/packages/lexik_jwt_authentication.yaml zu finden. Im Gegensatz zu dem, was Page Builder benötigt, erfordert die vollständige JWT-Unterstützung die Aktivierung der authorization_header Option.

Die gesamte Konfiguration könnte wie folgt aussehen:

lexik_jwt_authentication:
    secret_key: '%env(APP_SECRET)%'
    encoder:
        signature_algorithm: HS256
    # Disabled by default, because Page builder uses a custom extractor
    token_extractors:
        authorization_header:
            enabled: true
        cookie:
            enabled: false
        query_parameter:
            enabled: false

Darüber hinaus wird auch eine neue Symfony Firewall benötigt. Sie sollte vor ezpublish_front in der Datei config/packages/security.yaml definiert werden.

Für REST API sollte die folgende Firewall konfiguriert werden:

ezplatform_rest:
    request_matcher: EzSystems\EzPlatformAdminUi\REST\Security\NonAdminRESTRequestMatcher
    user_checker: eZ\Publish\Core\MVC\Symfony\Security\UserChecker
    anonymous: ~
    guard:
        authenticators:
            - lexik_jwt_authentication.jwt_token_authenticator
        entry_point: lexik_jwt_authentication.jwt_token_authenticator
    stateless: true

Für GraphQL ist es fast dasselbe:

ezplatform_graphql:
    request_matcher: EzSystems\EzPlatformGraphQL\Security\NonAdminGraphQLRequestMatcher
    user_checker: eZ\Publish\Core\MVC\Symfony\Security\UserChecker
    anonymous: ~
    guard:
        authenticators:
            - lexik_jwt_authentication.jwt_token_authenticator
        entry_point: lexik_jwt_authentication.jwt_token_authenticator
    stateless: true

In der neuesten Version sind diese Firewalls bereits in der Standardkonfigurationsdatei enthalten.

Verwendung

Diese neue Funktion fügt einen neuen REST-API-Endpunkt und eine GraphQL-Mutation hinzu, die aufgerufen werden kann, um ein Token zu erhalten.

MethodPOST
Endpoint/api/ezp/v2/user/token/jwt

Accept header
Content-Type header

application/vnd.ez.api.JWT+json
application/vnd.ez.api.JWTInput+json

Beispiel für eine Anfrageinstanz:

{
    "JWTInput": {
        "username": "admin",
        "password": "publish"
    }
}

Und die erwartete Antwort, wenn die angegebenen Berechtigungsnachweise gültig sind:

{
    "JWT": { 
        "_media-type": "application/vnd.ez.api.JWTToken+json",
        "_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MDAxNjEyMzgsImV4cCI6MTYwMDE2NDgzOCwicm9sZXMiOlsiUk9MRV9VU0VSIl0sInVzZXJuYW1lIjoiYWRtaW4ifQ.AXfviM-usgDWSpYuRbNp294d2s2nNi720xhPyu6V3Ro"
    }
}

Jetzt muss das Token als Wert für die Inhaber-Token-Authentifizierungsmethode in der Client-Anwendung festgelegt werden.

Zusammenfassung

Diese neue bequeme Authentifizierungsmethode trägt dazu bei, dass Ibexa's DXP ein noch besseres Entwicklererlebnis bietet, indem es die Arbeit mit Headless schneller, unkomplizierter und reibungsloser macht. In der kommenden Version wird es weitere Verbesserungen für Entwickler geben!

Welche Fähigkeiten und Technologien erforderlich sind, um ein Headless CMS erfolgreich im Unternehmen zu implementieren

Headless CMS im Unternehmen

Dieses E-Book befasst sich mit den Faktoren, die berücksichtigt werden sollten, um über die richtigen Technologien und Skills zu verfügen. Außerdem, worauf geachtet werden muss, wenn es um die Nutzungskosten geht und um eine erfolgreiche digitale Transformation im Unternehmen zu gewährleisten.

E-Book herunterladen
Headless CMS im Unternehmen

Weitere Insights