OAuth 2.0 und JWT-Autorisierung in Java: Schritt-für-Schritt-Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

OAuth 2.0 und JWT-Autorisierung in Java: in der Praxis

\n\n

Moderne Webanwendungen und APIs kommen selten ohne Authentifizierungs- und Autorisierungsmechanismen aus. Die beiden gängigsten Standards – OAuth 2.0 und JWT (JSON Web Token) – ermöglichen die sichere Übertragung von Benutzerdaten und die Gewährung von Zugriff auf Ressourcen. In diesem Artikel werden wir anhand eines praktischen Beispiels mit Spring Boot erläutern, wie OAuth 2.0 und JWT-Autorisierung in Java implementiert werden. Sie erfahren, wie Sie einen Autorisierungsserver einrichten, JWT-Tokens generieren und verifizieren sowie die Endpunkte Ihrer REST-API schützen.

\n\n

Was sind OAuth 2.0 und JWT: Ein kurzer Überblick

\n

OAuth 2.0 ist ein Protokoll für delegierten Zugriff, das es Drittanwendungen ermöglicht, eingeschränkten Zugriff auf Benutzerressourcen zu erhalten, ohne deren Anmeldedaten weiterzugeben. Es wird häufig für die Anmeldung über soziale Netzwerke (Google, Facebook) und zum Schutz von APIs verwendet.

\n

JWT (JSON Web Token) ist ein kompaktes und eigenständiges Token-Format, das Informationen über den Benutzer (Claims) enthält und zur Integritätsprüfung signiert ist. JWT wird oft als Access-Token in OAuth 2.0 verwendet, da es keine Speicherung auf dem Server erfordert und leicht in HTTP-Headern übertragen werden kann.

\n

In der Praxis definiert OAuth 2.0 den Ablauf (Flow) zum Erhalten eines Tokens, während JWT das Format des Tokens selbst definiert. Zusammen bilden sie ein leistungsstarkes und sicheres Autorisierungssystem.

\n\n

Einrichtung des Spring Boot-Projekts mit Abhängigkeiten

\n

Zunächst erstellen wir ein grundlegendes Spring Boot-Projekt. Wir werden Spring Security, Spring Web und eine Bibliothek für die Arbeit mit JWT (z. B. jjwt) verwenden.

\n

Fügen Sie die folgenden Abhängigkeiten zu Ihrer pom.xml (Maven) oder build.gradle (Gradle) hinzu:

\n
<!-- Maven -->\n<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-security</artifactId>\n</dependency>\n<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-web</artifactId>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.3</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.3</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.3</version>\n    <scope>runtime</scope>\n</dependency>
\n

Jetzt erstellen wir eine Sicherheitskonfigurationsklasse, die CSRF deaktiviert und eine Filterkette definiert.

\n\n

Implementierung des Autorisierungsservers und Generierung von JWT

\n

Für OAuth 2.0 benötigen wir einen Endpunkt, der die Client-Anmeldedaten entgegennimmt und ein JWT-Token zurückgibt. Im einfachsten Fall kann dies eine Simulation eines Autorisierungsservers sein.

\n

Erstellen wir einen Service für die Arbeit mit JWT:

\n
import io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.security.Keys;\nimport org.springframework.stereotype.Service;\n\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\n@Service\npublic class JwtService {\n\n    private final SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);\n    private final long expirationMs = 3600000; // 1 Stunde\n\n    public String generateToken(String username) {\n        Date now = new Date();\n        Date expiryDate = new Date(now.getTime() + expirationMs);\n\n        return Jwts.builder()\n                .subject(username)\n                .issuedAt(now)\n                .expiration(expiryDate)\n                .signWith(secretKey)\n                .compact();\n    }\n\n    public String                

Blogs

Buchempfehlungen