WSO2 Identity Server 4 Minuten

WSO2IS als IdP für Spring Application mit SAML2

Sajith Abeywardhana
Integration / DevOps Consultant
WSO2 Identity Server SML2
Scrollen

In diesem Artikel besprechen wir, wie wir WSO2 Identity Server mit einer Spring Boot-Anwendung unter Verwendung von SAML2 integrieren können. SAML2 ist ist ein Open Security Standard.

Mithilfe der SAML2-Integration innerhalb der Spring Boot Application können sich Benutzer mit WSO2 IS für diese Anwendung authentifizieren. Unsere Spring Boot Application wird als SAML2 Service Provider (SP) und der WSO2 IS als SAML2 Identity Provider (IdP) dienen. Der Anwender wäre ein „Prinzip“ und dieser Artikel verwendet den vom Service Provider initiierten SAML2 Flow.

Die folgende Abbildung zeigt den SAML2 Flow.

Der Artikel ist in folgende Hauptthemen unterteilt:

  • Erstellen eines Service Providers in WSO2 IS
  • Implementieren der Spring Boot Application
  • Testen des Anwendungsfalles

Erstellen eines Service Providers in WSO2 IS

  1. Starten Sie WSO2 IS, melden Sie sich an der Management-Konsole an und navigieren Sie zu Identität > Service Providers > Hinzufügen.[1]
  2. Geben Sie den Namen des Service Providers als „SpringbootSAML2SP“ ein und klicken Sie auf die Schaltfläche „Registrieren“.
  3. Im Fenster „Basic Information“ des Service Providers müssen wir ein Anwendungszertifikat angeben. Das Zertifikat wird bei der Überprüfung der SAML2-Anfragen, die von unserer Spring Boot Application übermittelt werden, verwendet.

Hinweis: Die Erstellung von Keystore und Zertifikat bezieht sich auf die Spring Boot Application, aber in diesem Abschnitt werden wir beides erstellen, da wir das Zertifikat beim Konfigurieren des Service Providers in WSO2 IS einfügen müssen.

A. Erstellen Sie einen neuen Keystore
keytool -genkey -keyalg RSA -alias saml2cert -keystore keystore.jks -storepass password -validity 365 -keysize 2048

B. Exportieren Sie das Zertifikat
keytool -export -keystore keystore.jks -alias saml2cert -file certificate.cer

C. Geben Sie den folgenden Befehl ein, um das Zertifikat im Terminal anzuzeigen. Kopieren Sie dann den Inhalt und fügen Sie ihn in den Abschnitt für das Anwendungszertifikat des Dienstanbieters in der WSO2 IS-Administrationskonsole ein.
keytool -printcert -rfc -file certificate.cer

D. Aktivieren Sie das Kontrollkästchen „SaaS-Anwendung“ und scrollen Sie dann zur „Konfiguration der eingehenden Authentifizierung“ -> SAML2 Web SSO Konfiguration. Klicken Sie auf den Link „Configure“.

E. Stellen Sie die Informationen zum Dienstanbieter wie unten angegeben ein und klicken Sie auf die Schaltfläche „Registrieren“.

issuerhttp://localhost:8080/saml2/service-provider-metadata/wso2Eindeutiger Bezeichner des Dienstanbieters. Dies ist ebenfalls der Issuer-Wert, der in der SAML-Authentifizierungsanfrage des Dienstanbieters angegeben ist.
Assertion Consumer URLshttp://localhost:8080/login/saml2/sso/wso2Das ist die URL, an die der Browser nach erfolgreicher Authentifizierung weitergeleitet werden soll.

Lassen Sie die restliche Konfiguration als Standard und aktualisieren Sie den Service Provider.

Die Spring-Boot-Application einrichten

Um ein Spring-Boot-Projekt zu generieren, werde ich das Web-Tool Spring Initializer verwenden, dann das Projekt in die IDE importieren und anschließend den Rest der Implementierung vornehmen.

Komplettes Beispielprojekt in Bitbucket: https://bitbucket.org/yenlo/yenlo_springboot-wso2is-sample 

Schritt 1

Öffnen Sie die Webseite https://start.spring.io/ und erfassen Sie die Projekt-Artefakte wie unten angegeben.

Gruppe: com.wso2is.saml2.sample
Artefakt: springboot-wso2is-sample

Ergänzen Sie die Abhängigkeiten von Thymeleaf, Spring Security, Spring Boot DevTools und LombokKlicken Sie auf „Generieren“, um das Projekt herunterzuladen, und importieren Sie es dann als Maven-Projekt in Ihre IDE.

Schritt 2

Fügen Sie die folgende SAML2-Dependency zum Projekt hinzu.

<dependency> 

<groupId>org.springframework.security</groupId>

<artifactId>spring-security-saml2-service-provider</artifactId> 

</dependency>

Schritt 3

Nachdem wir unseren gesamten Beispielcode integriert haben, wird unsere Projektstruktur wie unten dargestellt aussehen:

Schritt 4

Wenn sich der Benutzer bei der Spring-Boot-Application anmelden möchte, dann muss er sich zuerst über den SAML2-Flow authentifizieren. Die WebConfiguration-Klasse fängt die Anmeldung ab und initiiert die SAML2-Anfrage wie unten gezeigt:

Schritt 5

Der unten stehende Controller kümmert sich um die HTTP-Anfragen. Wenn der Benutzer den HTTP-GET über http://localhost:8080/login ausführt, wird er die Konfiguration der automatisch verdrahteten Weiterleitungsparteien verwenden, um die benötigten Zertifikate, privaten Schlüssel, SSO-URL usw. zu erhalten.

Schritt 6

Konfigurieren Sie „wso2“ als vertrauenswürdige Partei mithilfe der Datei application.properties.

A. Generieren Sie einen Private Key: Da wir bereits einen KeyStore und ein Zertifikat haben, verwenden Sie die folgenden Befehle, um einen Private Key zu erzeugen.
keytool -importkeystore -srckeystore keystore.jks -srcstorepass password -srckeypass password -srcalias saml2cert -destalias saml2cert -destkeystore keystore.p12 -deststoretype PKCS12 -deststorepass password -destkeypass password

openssl pkcs12 -in keystore.p12 -nodes -nocerts -out private_key.pem

B. Erzeugen Sie das Zertifikat aus wso2carbon.jks.
keytool -export -keystore wso2carbon.jks -alias wso2carbon -file wso2is-certificate.cer

Schritt 7

Erfassen Sie eine Beispiel-HTML-Datei zur Anzeige der SAML-Antwort.

Erstellen Sie eine index.html-Seite im Ordner resources/templates/. Sobald der IdP die Anfrage umleitet, ruft der ACS URL-Controller diese Beispiel-Indexseite auf.

Den Flow testen

Schritt 1

Erstellen Sie nun die Spring-Boot-Application und führen Sie sie aus.Now build and run the Spring boot application.

Schritt 2

Öffnen Sie den Webbrowser und geben Sie die URL als http://localhost:8080/login ein.

Dies sollte auf die WSO2 IS-Anmeldeseite umgeleitet werden. Tragen Sie den Benutzernamen/das Kennwort (admin/admin) ein und klicken Sie dann auf die Schaltfläche „Weiter“.

Schritt 3

Sie werden an die Spring-Boot-Application weitergeleitet und die Index-Seite wird mit SAML2-Antwortinformationen angezeigt.

Schlussfolgerung

Im oben genannten Blog wurden die Umrisse einer Spring-Boot-Applicaton gezeigt, die die Benutzerauthentifizierung an WSO2 Identity Server delegiert. Eine Spring-Boot-Applicaton mit einem Identity Provider zu verbinden bedeutet, dass sowohl auf der Seite der Spring-Boot-Applicaton als auch auf der Seite des WSO2 Identity Servers Zertifikate und Schlüssel generiert und einige Konfigurationen vorgenommen werden müssen. 

Anhand von SAML2 haben wir gezeigt, dass wir den WSO2 Identity Server einfach als Single Sign-On Engine für unsere Spring-Boot-Applicaton verwenden können.

Referenzen:

[1]. https://is.docs.wso2.com/en/5.9.0/learn/adding-and-configuring-a-service-provider/#
[2]. https://github.com/spring-projects/spring-security/blob/master/docs/manual/src/docs/asciidoc/_includes/servlet/saml2/saml2-login.adoc#saml-2-login—not-yet-supported