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.
Method | POST |
Endpoint | /api/ezp/v2/user/token/jwt |
Accept header | application/vnd.ez.api.JWT+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.