Leistungsstarke, dateibasierte Konfiguration in Magnolia
Juni 2, 2021
--
Powerful file-based configuration 656x400

Leistungsstarke, dateibasierte Konfiguration in Magnolia

Magnolia in Aktion

Unser Expertenteam zeigt Ihnen live, was Magnolia für Sie leisten kann.

Jetzt Demo buchen

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:

Java
  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:

Java
  curl 'http://localhost:8080/.rest/status' -H "Herkunft: http://localhost:8081" -v -o /dev/null  

Sie sollten einen 403-Fehlercode sehen:

Java
  % 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:

Java
  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.

Java
  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:

Java
  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.

Über den autor

Maxime Michel

Site Reliability Engineer, Magnolia

Half developer, half Site Reliability Engineer (SRE), Maxime contributes to Magnolia’s source code and works closely with the wider product development team. He believes that machines can take care of repetitive tasks so that people can focus on more creative and interesting work. In his role at Magnolia, Maxime is responsible for processes and automation to present our users with a simple solution and a great user experience.