OAuth 2.0 und JWT-Autorisierung in Java: Vollständiger Leitfaden

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-Autorisierung mit Java

Moderne Webanwendungen und APIs erfordern zuverlässige Mechanismen für Authentifizierung und Autorisierung. Zwei Standards, die in der Java-Entwicklungswelt zum De-facto-Standard geworden sind, sind OAuth 2.0 und JWT (JSON Web Tokens). OAuth 2.0 bietet ein Protokoll zur Delegierung des Zugriffs, während JWT ein kompaktes und eigenständiges Format zur Datenübertragung darstellt. In diesem Artikel werden wir untersuchen, wie man diese Technologien mit Java unter Verwendung von Spring Security und gängigen Bibliotheken kombiniert.

Sie erfahren, wie Sie einen Autorisierungsserver einrichten, JWT-Tokens generieren und überprüfen sowie Ihre REST-Endpunkte schützen. Das Material ist sowohl für Anfänger als auch für erfahrene Java-Entwickler nützlich, die ihre Kenntnisse im Bereich Sicherheit vertiefen möchten.



Grundlagen von OAuth 2.0: Abläufe und Rollen

OAuth 2.0 definiert vier Rollen: Resource Owner (Ressourceninhaber), Client (Anwendung), Authorization Server (Autorisierungsserver) und Resource Server (Ressourcenserver). Zu den gängigsten Abläufen (Grants) gehören:

  • Authorization Code — für Webanwendungen mit serverseitiger Komponente.
  • Client Credentials — für Server-zu-Server-Kommunikation.
  • Resource Owner Password — für vertrauenswürdige Clients (veraltet).
  • Implicit — für SPAs (nicht mehr empfohlen).

Mit Java können wir einen OAuth 2.0-Server mit spring-security-oauth2-authorization-server implementieren. Betrachten wir ein Beispiel für die Konfiguration eines grundlegenden Autorisierungsservers.



Einrichtung des Authorization Server mit Spring Boot

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

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-oauth2-authorization-server</artifactId></dependency><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency>

Erstellen Sie die Konfiguration SecurityConfig.java:

@Configuration@EnableWebSecuritypublic class SecurityConfig {

@Bean @Order(1) public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception { OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http); return http.build(); }

@Bean @Order(2) public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated()) .formLogin(Customizer.withDefaults()); return http.build(); }

@Bean public RegisteredClientRepository registeredClientRepository() { RegisteredClient registeredClient = RegisteredClient.withId("client-id") .clientId("my-client") .clientSecret("{noop}secret") .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) .redirectUri("http://localhost:8080/login/oauth2/code/my-client") .scope("read") .scope("write") .build(); return new InMemoryRegisteredClientRepository(registeredClient); }}


JWT: Struktur und Token-Generierung

JWT besteht aus drei Teilen: Header, Payload und Signature. Der Header enthält den Tokentyp und den Verschlüsselungsalgorithmus. Die Payload enthält Claims (Aussagen) wie sub (Subjekt), exp (Ablaufzeit) und roles. Die Signatur gewährleistet die Datenintegrität.

Für die Arbeit mit JWT in Java verwenden wir die Bibliothek io.jsonwebtoken:jjwt. Fügen Sie die Abhängigkeit hinzu:

Blogs

Buchempfehlungen