[JAVA] Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.

Überblick

Tag 3 des Keycloak-Adventskalenders beschreibt das Verfahren zum ** Delegieren der Authentifizierung für Spring Boot-basierte Webanwendungen an Keycloak **. Keycloak verfügt über einen Adapter für Spring Boot, mit dem Spring Boot-basierte Webanwendungen einfach gesichert werden können. Dies macht es zu einer sicheren Spring Boot-Anwendung, die das neueste Authentifizierungsprotokoll ** "OpenID Connect" ** (OIDC) unterstützt.

Sobald die Verknüpfung hergestellt ist, werden Benutzer zum "Endbenutzer" von OIDC, Spring Boot-basierte Webanwendungen zu "Relying Party" von OIDC und Keycloak zum "Open ID Provider" von OIDC.

env.png

Bevor du anfängst

Sie müssen das Keycloak-Setup abschließen und einen Administrator erstellen, bevor Sie mit diesem Lernprogramm arbeiten können. Weitere Informationen zum Ausführen dieser Aufgaben finden Sie im Artikel Keycloak Adventskalender Tag 2. Außerdem wird Gradle oder Maven zum Erstellen und Starten der Webanwendung verwendet. Installieren Sie daher eine der beiden Anwendungen.

Dieses Mal werden sowohl Keycloak- als auch Spring Boot-basierte Webanwendungen auf localhost erstellt.

Kooperationsverfahren

Das Verfahren für die Zusammenarbeit ist wie folgt. Überprüfen Sie anschließend den Vorgang.

  1. Keycloak-Einstellungen --1.1. Ein Reich erstellen --1.2. Erstellen eines Clients --1.3. Eine Rolle erstellen --1.4 Benutzer erstellen und Rollen zuweisen
  2. Erstellen Sie eine einfache Spring Boot-Anwendung --2.1. Erstellen einer App-Vorlage mit Spring Initializr --2.2. Erstellen von Klassen und HTML --2.3. Einstellung der Keycloak-Verknüpfung der Anwendung

1.1. Ein Reich erstellen

Bevor wir ein Reich erstellen, werfen wir einen kurzen Blick auf das Reich. ** "Realm" in Keycloak bedeutet einen Bereich zum Gruppieren von Benutzern, Rollen, verbundenen Datenspeichern (LDAP usw.). ** Benutzer können im Realm erstellen und die Authentifizierungsmethode usw. kann für jeden Realm definiert werden. Standardmäßig gibt es einen Bereich namens "Master", und alle danach hinzugefügten Bereiche können eingeschlossen und verwaltet werden. Der Bereich "Master" ist die höchste Ebene in der Bereichshierarchie und kann von einem Superadministrator verwaltet werden (dem Administratorkonto, das bei der Ersteinrichtung erstellt wurde).

realm.png

Sie können den Bereich "Master" verwenden, um Benutzer usw. zu verwalten. Grundsätzlich wird jedoch empfohlen, einen Bereich zu erstellen. Erstellen Sie daher zuerst einen Bereich. Sie können auch den Bereich "Master" löschen.

Gehen Sie zu [http: // localhost: 8080 / auth / admin /](http: // localhost: 8080 / auth / admin /) und melden Sie sich mit einem Administratorkonto bei der Keycloak-Administratorkonsole an.

2017-10-29 11.34.Screenshot von 04.png

Klicken Sie im Dropdown-Menü mit der Bezeichnung Master in der oberen linken Ecke auf Realm hinzufügen.

2017-11-04 01.03.Screenshot von 23.png

Die Seite Realm hinzufügen wird geöffnet. Da Sie einen neuen Realm erstellen, geben Sie "Demo" in den Realmnamen ein und klicken Sie auf die Schaltfläche "Erstellen".

2017-11-04 01.07.Screenshots von 14.png

Wenn Sie einen Bereich erstellen, werden Sie zur Hauptseite der Verwaltungskonsole weitergeleitet. Der aktuelle Bereich sollte "Demo" sein.

2017-11-04 01.10.Screenshots von 35.png

Sie können zwischen dem von Ihnen kontrollierten Master-Bereich und dem gerade erstellten Bereich wechseln, indem Sie auf das Dropdown-Menü in der oberen linken Ecke klicken.

1.2. Erstellen eines Clients

Erstellen Sie als Nächstes einen Client (*). In diesem Fall ist der Client die OIDC-definierte "vertrauende Partei" (in OAuth 2.0, die Grundlage von OIDC 1.0, auch als "Client" bezeichnet) und die Spring Boot-Anwendung.

* Um genau zu sein, erstellen Sie ein Profil für den Client. Der Client selbst wird mit "Spring Initializr" erstellt, das später beschrieben wird.

Klicken Sie in der linken Menüleiste auf Client. Der Client-Listenbildschirm wird angezeigt. Klicken Sie daher auf die Schaltfläche "Erstellen".

2017-11-05 20.25.Screenshot von 52.png

Geben Sie "sample-app" ein und klicken Sie auf die Schaltfläche "Speichern".

2017-11-05 20.26.Screenshot von 06.png

Geben Sie "http: // localhost: 8081 / hello" für den gültigen Umleitungs-URI ein.

Screenshot from 2017-11-30 21-26-28.png

<! -![Screenshot vom 2017-11-05 20.27.19.png](https://qiita-image-store.s3.amazonaws.com/0/43869/9f17916d-8ca3-3e59-b85f- ce215ea23c75.png) |

2017-11-05 20.27.Screenshots von 19.png

-->

1.3. Eine Rolle erstellen

Erstellen Sie als Nächstes eine Rolle, die dem Benutzer zugewiesen werden soll. Wir werden es später so konfigurieren, dass nur Benutzer, denen diese Rolle zugewiesen wurde, auf die Spring Boot-Anwendung zugreifen können.

Die Rolle

bezeichnet die Rolle des Benutzers und wird verwendet, um den Typ oder die Kategorie des Benutzers zu identifizieren. Administratoren, Benutzer, Manager, Mitarbeiter usw. sind typische Rollen, die in einer Organisation vorhanden sind. Anwendungen weisen häufig eher bestimmten Rollen als einzelnen Benutzern Zugriff zu, sodass die Verwaltung von Benutzern nicht schwierig ist. </ td> </ tr> </ table>

Klicken Sie in der linken Menüleiste auf Rollen. Der Rollenlistenbildschirm wird angezeigt. Klicken Sie daher auf die Schaltfläche "Erstellen".

2017-11-05 20.34.Screenshot von 06.png

Geben Sie "Benutzer" in den "Rollennamen" ein und klicken Sie auf die Schaltfläche "Speichern".

2017-11-05 20.34.Screenshots von 29.png

1.4 Benutzer erstellen und Rollen zuweisen

Erstellen Sie abschließend einen Benutzer und weisen Sie eine Rolle zu. Klicken Sie in der linken Menüleiste auf Benutzer. Der Benutzerlistenbildschirm wird angezeigt. Klicken Sie daher auf die Schaltfläche "Erstellen".

Die Benutzerlistenseite wird geöffnet. Klicken Sie rechts neben der leeren Benutzerliste auf Benutzer hinzufügen.

2017-11-04 01.36.Screenshots von 39.png

Geben Sie nur den erforderlichen Benutzernamen ein und klicken Sie auf die Schaltfläche "Speichern", um die neue Benutzerverwaltungsseite zu öffnen.

2017-11-04 01.38.Screenshots von 12.png

Legen Sie als Nächstes das Kennwort für den neuen Benutzer fest. Klicken Sie auf die Registerkarte Anmeldeinformationen.

Nach Eingabe des neuen Passworts und Passworts (Bestätigung) erscheint eine rote Schaltfläche "Passwort zurücksetzen". Ändern Sie zu diesem Zeitpunkt "temporär" in "aus". Dadurch müssen Sie Ihr Kennwort beim ersten Anmelden nicht mehr ändern.

2017-11-04 11.37.Screenshot von 09.png

Klicken Sie auf die Schaltfläche "Passwort zurücksetzen", um Ihr Passwort zurückzusetzen.

Klicken Sie abschließend auf das Tag "Rollenzuordnung" und verschieben Sie den "Benutzer" unter "Verfügbare Rollen" in "Zugewiesene Rollen".

2017-11-05 21.48.Screenshot von 03.png

Damit sind die Keycloak-Einstellungen abgeschlossen.

2.1. Erstellen einer App-Vorlage mit Spring Initializr

Erstellen Sie als Nächstes eine Spring Boot-Anwendung. Verwenden Sie Spring Initializr, um eine Vorlage für Ihre Spring Boot-Anwendung zu erstellen. Bitte besuchen Sie die Seite Spring Initializr.

2017-11-05 20.42.Screenshots von 16.png

Geben Sie Folgendes ein, wählen Sie es aus, wie im obigen Bildschirm gezeigt, und klicken Sie dann auf die Schaltfläche "Projekt generieren".

Artikel Wert einstellen
Project Gradle-Projekt oder Maven-Projekt
Sprache Java
Dependencies Web、Thymeleaf、DevTools、Keycloak
Group com.example
Artifact sample-app

Die komprimierte Datei wird heruntergeladen. Entpacken Sie sie in ein geeignetes Verzeichnis.

2.2 Erstellen von Klassen und HTML

Erstellen Sie zunächst statisches HTML für die oberste Seite. Erstellen Sie eine HTML-Datei mit dem Namen "index.html" in "src / main / resources / static /" mit den folgenden Inhalten.

<html>
<head>
    <title>Sample Application</title>
</head>
 <body>
   <h1>Sample Application</h1>
   <a href="/hello">Go to hello page!</a>
 </body>
</html>

Erstellen Sie als Nächstes den Controller und den Bildschirm, die von diesem Bildschirm aus aufgerufen werden. Der Controller sollte den folgenden Inhalt in "src / main / java / com / example / sampleapp /" mit dem Dateinamen "HelloController.java" haben.

package com.example.sampleapp;

import java.util.Locale;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
class HelloController {

    @RequestMapping(value = "/hello")
    public ModelAndView hello(HttpSession ses, ModelAndView mav, Locale locale) {
    	mav.setViewName("hello");
        mav.addObject("message", "Hello! Spring Boot and Keycloak!");
        return mav;
    }
    
    @RequestMapping(value = "/logout")
    public String logout(HttpServletRequest request) throws ServletException {
       request.logout();
       return "redirect:/";
    }
}

Der von diesem Controller aufgerufene Bildschirm wird in src / main / resources / templates / mit einer HTML-Datei namens hello.html erstellt.

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" th:with="lang=${#locale.language}" th:lang="${lang}">
<h1>Hello</h1>
<p th:text="${message}" /><br />
<p>
    <a href="/logout">Logout</a>
</p>
</html>

Die Verzeichnisstruktur ist wie folgt.

2017-11-05 21.02.14 からのスクリーンショット.png

Damit ist die Beispielwebanwendung abgeschlossen.

2.3 Einrichten der Keycloak-Integration für Apps

Konfigurieren Sie abschließend die erstellte Webanwendung für die Verwendung mit Keycloak. Fügen Sie die folgende Definition zu "/ src / main / resources / application.properties" hinzu.

keycloak.auth-server-url=http://localhost:8080/auth
keycloak.realm=demo
keycloak.public-client=true
keycloak.resource=sample-app
keycloak.security-constraints[0].authRoles[0]=user
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/hello/
server.port=8081

Es definiert, dass der Zugriff auf [http: // localhost / hello /](http: // localhost / hello /) und darunter eine Authentifizierung erfordert und dass der Benutzer die Rolle "Benutzer" haben muss. Die letzte Eigenschaft gibt an, dass diese Anwendung auf Port 8081 abgehört wird.

Damit sind alle Einstellungen abgeschlossen.

Funktionsprüfung

Lassen Sie uns die Operation überprüfen. Starten Sie die mit dem folgenden Befehl erstellte Webanwendung.

Für Gradle

$ gradle bootRun

Für Maven

$ mvn spring-boot:run

Wenn Sie auf [http: // localhost: 8081](http: // localhost: 8081) zugreifen, wird der folgende Bildschirm angezeigt.

2017-11-05 22.10.Screenshot von 02.png

Wenn Sie auf den Link "Zur Hallo-Seite gehen!" Klicken, gelangen Sie zum Keycloak-Anmeldebildschirm.

2017-11-05 22.04.Screenshot von 53.png

Bitte melden Sie sich als erstellter Benutzer an. Wenn die bisherigen Einstellungen korrekt vorgenommen wurden, wird der folgende Bildschirm angezeigt.

2017-11-05 22.11.Screenshots von 56.png

Schließlich

Auf diese Weise ist es sehr einfach, die Authentifizierung für Spring Boot-basierte Webanwendungen an Keycloak zu delegieren. Dies ist nicht nur einfach, sondern implementiert auch einen standardmäßigen und sicheren Anmeldevorgang.

Ich habe diesmal den Spring Boot Adapter verwendet, aber es gibt auch einen Spring Security Adapter, der im Spring Boot Keycloak Starter enthalten ist. Ich werde zu einem anderen Zeitpunkt darüber sprechen (falls es einen gibt ...).


Referenzmaterial

mark.png

Recommended Posts