Einführung in OAuth 2.0 und JWT in Java
\n\nModerne 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\nOAuth 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\nGrundlagen von OAuth 2.0: Wie es funktioniert
\n\nOAuth 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
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\nBeispiel für die Konfiguration eines OAuth 2.0-Clients in Spring Boot
\n\nFügen Sie die Abhängigkeit in pom.xml hinzu:
<dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-oauth2-client</artifactId>\n</dependency>\n\nKonfigurieren Sie application.yml für die Arbeit mit Google OAuth 2.0:
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\nJetzt verarbeitet Spring Security automatisch die Weiterleitung zur Google-Anmeldeseite und gibt ein Zugriffstoken zurück.
\n\nJWT: Struktur und Erstellung des Tokens
\n\nJWT 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
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\nErstellung eines JWT-Tokens in Java
\n\nHier ist ein Beispiel für eine Klasse zur Generierung und Validierung von JWT:
\n\nimport 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