Leistungsstarke, dateibasierte Konfiguration in Magnolia
Die Konfiguration von Magnolia in Light Modules über YAML ist eine äußerst praktische Funktion, die wir mit Magnolia 6.1 eingeführt haben. Es ist schon ein paar Monate her, dass ich es zum ersten Mal benutzt habe, aber ich erinnere mich noch gut daran, wie aufgeregt ich war, als ich sein Potenzial erkannte, und ich freue mich darauf, es hier vorzustellen.
Neben der Konfiguration von Dialogen und Templates kann nun auch ein Teil der Kernfunktionalität von Magnolia über YAML geändert werden. Der Vorteil dieses Low-Code-Ansatzes ist eine schnellere Implementierung von Konfigurationsänderungen, ohne ein Java-Modul einsetzen zu müssen.
In diesem Blog zeige ich Beispiele für die Konfiguration von zwei neuen Magnolia-Features mit YAML:
Ursprungsübergreifende Ressourcennutzung (CORS)
Einmalige Anmeldung (SSO)
CORS-Konfiguration
Eine häufige Anforderung in Headless-Projekten ist CORS. Aber wussten Sie, dass Sie CORS mit Light Development schneller als je zuvor konfigurieren können?
Obwohl in unserer Dokumentation nicht explizit erwähnt, ist es möglich, CORS durch YAML-Dekoration in einem Light-Modul zu konfigurieren.
Dies sind die Voraussetzungen, die anhand der Dokumentation für REST-Endpunkte und CORS konfiguriert werden können:
Ein REST-Endpunkt: Für diese Demonstration werde ich den Endpunkt status verwenden.
Der CORS-Filter für die Website: Dies ist die Standardeinstellung. Um sicher zu gehen
- prüfen Sie /server/filters/cors
Eine CORS-Konfiguration für Ihre Site
- zum Beispiel /modules/multisite/config/sites/<YOUR_SITE>/cors/<YOUR_SITE_CORS_NAME>
Bitte beachten Sie, dass Magnolia zwei Varianten von Magnolia DX Core anbietet - mit und ohne unsere Reisedemo. Ich habe Magnolia DX Core ohne die Reisedemo verwendet, weil die Konfiguration der fallback site in der Demo das Beispiel stören würde.
Da nun ein Konfigurationsknoten vorhanden ist, können Sie die Definitionsdekoration aus dem Bereich des Lichtmoduls verwenden, um sie zu erweitern.
Erstellen Sie die folgende Datei:
modules/<YOUR_LIGHT_MODULE>/decorations/multisite/config.yaml.
Konfigurieren Sie nun CORS wie in der Dokumentation beschrieben und erlauben Sie Anfragen von localhost:8080:
sites: fallback: cors: fallback: uris: rest: patternString: /.rest/* allowedOrigins: - http://localhost:8080 allowedMethods: - GET allowedHeaders: - Accept - Content-Type - Origin - X-PINGOTHER - X-Requested-With
Die Sicherheitseinstellungen werden nun auf den Endpunkt angewendet, wodurch sich seine Antwort auf einen nicht autorisierten Ursprung ändert. Sie können das Ergebnis mit dem folgenden Befehl überprüfen:
curl 'http://localhost:8080/.rest/status' -H "Herkunft: http://localhost:8081" -v -o /dev/null
Sie sollten einen 403-Fehlercode sehen:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 0 --:--:-- --:--:--:--:-- 0* Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8080 (#0) > GET /.rest/status HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.64.1 > Accept: */* > Herkunft: http://localhost:8081 > 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0< HTTP/1.1 403 < Set-Cookie: JSESSIONID=06AC2693F1AB32108B6CF6E1EA8C6551; Path=/; HttpOnly < Pragma: no-cache < Cache-Control: no-cache, no-store, must-revalidate, max-age=0 < Expires: Thu, 01 Jan 1970 00:00:00 GMT < WWW-Authenticate: FormBased < Content-Type: text/html;charset=UTF-8 < Transfer-Encoding: chunked < Date: Mon, 31 May 2021 08:10:05 GMT < { [1386 bytes data] 100 1379 0 1379 0 0 478 0 --:--:-- 0:00:02 --:--:-- 478 * Verbindung #0 zum Host localhost bleibt bestehen * Schließen der Verbindung 0
Dieser Konfigurationsansatz hat folgende Vorteile gegenüber der Standardkonfiguration:
Sie ist unabhängig von der Konfiguration der Instanz
- und Sie müssen sie nicht mit einem Java-Modul in JCR schreiben.
Die Aktualisierung dieser Konfiguration ist viel einfacher. Aktualisieren Sie einfach die Datei
- damit Magnolia die Änderung sofort umsetzt.
Sie wird in einer reinen Textdatei gespeichert
- die einfach in ein Git-Repository eingefügt werden kann
- mit all seinen Vorteilen.
Low-code Development
Simplify and speed up development with Magnolia using file-based configuration.
SSO-Konfiguration
Das neue pac4j-basierte Magnolia SSO-Modul verwendet ebenfalls YAML-Dekoration, um die komplexe Integration mit Authentifizierungsdiensten so weit wie möglich zu vereinfachen.
Ein Wort der Warnung: Wenn Sie das Modul installieren, gehen wir davon aus, dass Sie es verwenden möchten, und das Modul wird versuchen, die Kontrolle über Ihre Instanz zu übernehmen. Wir empfehlen, das Modul in einer Entwicklungsumgebung zu installieren, bevor Sie es in die Produktion einführen, aber ich gehe davon aus, dass dies bereits eine bewährte Praxis ist.
Die anfängliche Konfigurationsdatei ist leer und wartet darauf, eingerichtet zu werden. Sobald die Konfiguration abgestimmt ist, wird Magnolia alle Änderungen sofort umsetzen.
Dies ist die erste Hälfte der Konfigurationsdatei
<MODULE_NAME>/decorations/magnolia-sso/config.yaml:
authenticationService: path: /.magnolia/admincentral callbackUrl: http://localhost:8080/.auth groupMappings: /magnolia-sre: roles: - superuser
Diese Konfiguration:
Delegiert die Authentifizierung für AdminCentral Ihrer Instanz an einen dritten Identitätsanbieter
Fordert den Identitätsanbieter auf
- zu callbackUrl umzuleiten
- wenn ein Benutzer eingeloggt wurde
Wendet groupMappings auf die Eigenschaft groups des Benutzers an
- um Zugang zu AdminCentral zu gewähren
Integration mit der dateibasierten Konfiguration von pac4j
Ich freue mich sehr, eine große Verbesserung in der neuesten Version des Moduls mitzuteilen: Es integriert sich in die YAML-Konfiguration von pac4j. Dies bedeutet, dass das Modul mit jedem OpenID Connect Identitätsanbieter kompatibel ist.
Wir haben den Anwendungsfall mit Keycloak und Okta validiert. Dies ist die Konfiguration, die wir verwendet haben, um die OpenId-Connect-Eigenschaften des Clients für pac4j zu beschreiben, um eingehende Anfragen vom Identitätsanbieter zu bewerten.
authenticationService: pac4j: oidc.id: magnolia-sso oidc.secret: 2ff75b44-c7ef-4932-91c8-59e6ea5f35b6 oidc.scope: openid profile email oidc.discoveryUri: https://<YOUR_OIDC_IDP_DOMAIN>/.../.well-known/openid-configuration oidc.preferredJwsAlgorithm: RS256
So sieht die gesamte Konfigurationsdatei aus:
authenticationService: path: /.magnolia/admincentral callbackUrl: http://localhost:8080/.auth groupMappings: /magnolia-sre: roles: - superuser pac4j: oidc.id: magnolia-sso oidc.secret: 2ff75b44-c7ef-4932-91c8-59e6ea5f35b6 oidc.scope: openid profile email oidc.discoveryUri: https://<YOUR_OIDC_IDP_DOMAIN>/.../.well-known/openid-configuration oidc.preferredJwsAlgorithm: RS256
Schlussfolgerung
Ich hoffe, dieser Artikel war hilfreich bei der Erläuterung der Definitionsdekoration. Es handelt sich dabei um einen Hilfsmechanismus, der in späteren Abschnitten unserer Dokumentation erläutert wird und oft in späteren Phasen eines Projekts in Betracht gezogen wird. Die Einrichtung ist mit etwas Aufwand verbunden, aber ich hoffe, ich konnte Sie davon überzeugen, dass die Vorteile den Aufwand wert sind.
Wenn Sie Hilfe bei der Implementierung benötigen, können Sie mir eine E-Mail schicken.