Einführung in OAuth 2.0 und JWT in Java
Moderne Webanwendungen und APIs erfordern zuverlässige Mechanismen für Authentifizierung und Autorisierung. Die beiden beliebtesten Standards in diesem Bereich sind OAuth 2.0 und JWT (JSON Web Tokens). Wenn Sie ein Java-Anfänger sind, eröffnet Ihnen das Verständnis dieser Technologien den Weg zur Erstellung sicherer und skalierbarer Anwendungen.
In diesem Artikel werden wir untersuchen, was OAuth 2.0 und JWT sind, wie sie zusammenarbeiten und wie man sie in Java mit gängigen Bibliotheken implementiert. Sie erfahren, wie Sie einen Autorisierungsserver einrichten, JWT-Token generieren und validieren sowie Ihre REST APIs schützen.
Was sind OAuth 2.0 und JWT?
OAuth 2.0 – Protokoll für delegierten Zugriff
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. Stellen Sie sich vor, Sie möchten einer Anwendung Zugriff auf Ihre Fotos in Google gewähren. Anstatt der Anwendung Ihr Google-Passwort mitzuteilen, verwenden Sie OAuth 2.0, das der Anwendung ein temporäres Token mit eingeschränkten Rechten ausstellt.
Die Hauptakteure von OAuth 2.0:
- Resource Owner – der Benutzer, der die Ressourcen besitzt
- Client – die Anwendung, die Zugriff anfordert
- Authorization Server – der Server, der Token ausstellt
- Resource Server – der Server, der geschützte Ressourcen bereitstellt
JWT – Kompaktes Token-Format
JWT (JSON Web Token) ist ein offener Standard (RFC 7519) zur Erstellung von Zugriffstoken, die Behauptungen (Claims) im JSON-Format enthalten. JWT besteht aus drei Teilen, die durch Punkte getrennt sind:
- Header – enthält den Tokentyp und den Signaturalgorithmus (z. B. HS256 oder RS256)
- Payload – enthält die Behauptungen (z. B. Benutzer-ID, Rollen, Ablaufdatum)
- Signature – die Signatur, die die Integrität des Tokens garantiert
Beispiel eines JWT: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U
Implementierung von OAuth 2.0 und JWT in Java
Projekt einrichten mit Spring Security
Für die Implementierung von OAuth 2.0 und JWT in Java verwenden wir Spring Boot und Spring Security. Beginnen wir mit dem Hinzufügen der Abhängigkeiten in die Datei pom.xml:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.12.3</version></dependency><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.12.3</version> <scope>runtime</scope></dependency><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.12.3</version> <scope>runtime</scope></dependency>Erstellen eines JWT-Providers
Erstellen wir eine Klasse JwtProvider, die für die Generierung und Validierung von JWT-Token zuständig ist:
import io.jsonwebtoken.*;import io.jsonwebtoken.security.Keys;import org.springframework.stereotype.Component;
import javax.crypto.SecretKey;import java.util.Date;
@Componentpublic class JwtProvider { private final SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256); private final