Autorisierung und Authentifizierung in Java: Spring Security und JWT

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

Autorisierung und Authentifizierung in Java: vollständiger Leitfaden mit Beispielen



In der modernen Webentwicklung ist die Anwendungssicherheit einer der Schlüsselaspekte. Im Java-Ökosystem gibt es mehrere bewährte Werkzeuge zur Implementierung von Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Überprüfung der Zugriffsrechte). In diesem Artikel werden wir die Bibliotheken und Ansätze im Detail analysieren, die Ihnen helfen, Ihre Anwendung zu schützen.



Grundlegende Konzepte

Bevor wir zu den Werkzeugen übergehen, ist es wichtig, zwei Konzepte zu unterscheiden:

  • Authentifizierung — der Prozess der Überprüfung, ob der Benutzer derjenige ist, der er vorgibt zu sein (z. B. Login und Passwort).
  • Autorisierung — die Bestimmung, welche Ressourcen oder Aktionen einem authentifizierten Benutzer zur Verfügung stehen.


Spring Security — Industriestandard

Spring Security ist ein leistungsstarkes Framework für die Sicherheit in Java-Anwendungen, insbesondere in Verbindung mit Spring Boot. Es bietet vorgefertigte Mechanismen für die Authentifizierung über Formular, HTTP Basic, OAuth2, LDAP und viele andere.

Hauptfunktionen:

  • Flexible Konfiguration von Sicherheitsfilterketten.
  • Unterstützung von Sitzungen und JWT-Tokens.
  • Schutz vor CSRF-Angriffen, XSS, Clickjacking.
  • Integration mit Datenbanken zur Speicherung von Benutzern.


Beispiel einer grundlegenden Spring Security-Konfiguration mit JWT:

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.http.SessionCreationPolicy;import org.springframework.security.web.SecurityFilterChain;

@Configuration@EnableWebSecuritypublic class SecurityConfig {

@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeHttpRequests(authz -> authz .requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() ) .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); }}


JWT (JSON Web Token) — nahtlose Autorisierung

JWT ist eine kompakte und eigenständige Methode zur Übertragung von Daten im JSON-Format zwischen Parteien. In Java wird für die Arbeit mit JWT häufig die Bibliothek io.jsonwebtoken:jjwt verwendet.

Funktionsprinzip:

  1. Der Benutzer sendet Login/Passwort.
  2. Der Server überprüft die Daten und gibt ein JWT-Token zurück.
  3. Der Client speichert das Token (z. B. im localStorage) und sendet es im Header Authorization: Bearer <token>.
  4. Der Server überprüft die Signatur des Tokens und extrahiert die Daten (Rollen, Identifikator).


Beispiel für die Generierung eines JWT in Java:

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import java.security.Key;import java.util.Date;

public class JwtUtil { private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);

public static String generateToken(String username, String role) { return Jwts.builder() .setSubject(username) .claim("role", role) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1 Stunde .signWith(SECRET_KEY) .compact(); }}


OAuth2 und Spring

Empfehlungen