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

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

Einführung in OAuth 2.0 und JWT in Java

\n\n

Moderne Webanwendungen und APIs kommen selten ohne Authentifizierungs- und Autorisierungsmechanismen aus. Die beiden bekanntesten Standards in diesem Bereich sind OAuth 2.0 und JWT (JSON Web Token). Wenn Sie ein angehender Java-Entwickler sind, eröffnet Ihnen das Verständnis dieser Technologien den Weg zur Erstellung sicherer und skalierbarer Systeme.

\n\n

OAuth 2.0 ist ein Autorisierungsprotokoll, das es Anwendungen ermöglicht, eingeschränkten Zugriff auf die Ressourcen eines Benutzers zu erhalten, ohne dessen Anmeldedaten weiterzugeben. JWT wiederum ist ein kompaktes Token-Format, das zur Übertragung von Behauptungen (Claims) zwischen Parteien verwendet wird. In diesem Artikel werden wir untersuchen, wie man diese Technologien in einer Java-Anwendung mit Spring Security und gängigen Bibliotheken kombiniert.

\n\n

Grundlagen von OAuth 2.0: Wie es funktioniert

\n\n

OAuth 2.0 definiert mehrere Rollen der Interaktionsteilnehmer:

\n\n
    \n
  • Resource Owner — der Benutzer, der die geschützten Daten besitzt
  • \n
  • Client — die Anwendung, die Zugriff anfordert
  • \n
  • Authorization Server — der Server, der nach der Authentifizierung Token ausstellt
  • \n
  • Resource Server — der Server, der die geschützten Ressourcen speichert
  • \n
\n\n

Die Grundidee des Protokolls ist, dass der Client ein temporäres Zugriffstoken erhält, das er dem Ressourcenserver vorlegt. Das häufigste Szenario ist der Authorization Code Flow, der in Webanwendungen verwendet wird.

\n\n

Beispiel für die Konfiguration eines OAuth 2.0-Clients in Spring Boot

\n\n

Fügen Sie die Abhängigkeit in pom.xml hinzu:

\n\n
<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-oauth2-client</artifactId>\n</dependency>
\n\n

Konfigurieren Sie application.yml für die Arbeit mit Google OAuth 2.0:

\n\n
spring:\n  security:\n    oauth2:\n      client:\n        registration:\n          google:\n            client-id: YOUR_CLIENT_ID\n            client-secret: YOUR_CLIENT_SECRET\n            scope:\n              - email\n              - profile
\n\n

Jetzt verarbeitet Spring Security automatisch die Weiterleitung zur Google-Anmeldeseite und gibt ein Zugriffstoken zurück.

\n\n

JWT: Struktur und Erstellung des Tokens

\n\n

JWT besteht aus drei Teilen, die durch Punkte getrennt sind:

\n\n
    \n
  • Header — enthält den Tokentyp und den Signaturalgorithmus (z. B. HS256)
  • \n
  • Payload — enthält die Behauptungen (Claims): Benutzerdaten, Ablaufdatum, Rolle
  • \n
  • Signature — die aus Header und Nutzlast mit einem geheimen Schlüssel erstellte Signatur
  • \n
\n\n

Für die Arbeit mit JWT in Java wird am häufigsten die Bibliothek jjwt verwendet. Fügen Sie die Abhängigkeit hinzu:

\n\n
<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-api</artifactId>\n    <version>0.12.5</version>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-impl</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>\n<dependency>\n    <groupId>io.jsonwebtoken</groupId>\n    <artifactId>jjwt-jackson</artifactId>\n    <version>0.12.5</version>\n    <scope>runtime</scope>\n</dependency>
\n\n

Erstellung eines JWT-Tokens in Java

\n\n

Hier ist ein Beispiel für eine Klasse zur Generierung und Validierung von JWT:

\n\n
import io.jsonwebtoken.*;\nimport io.jsonwebtoken.security.Keys;\nimport javax.crypto.SecretKey;\nimport java.util.Date;\n\npublic class JwtUtil {\n\n    private final SecretKey secretKey = Keys.hmacShaKeyFor(\n        "my-secret-key-which-should-be-at-least-256-bits-long".getBytes()\n    );\n\n    public St                

Blogs

Buchempfehlungen