Autorisierung und Authentifizierung 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

Autorisierung und Authentifizierung in Java: Grundlegende Konzepte und Werkzeuge



Authentifizierung und Autorisierung sind zwei grundlegende Säulen der Sicherheit jeder Webanwendung. Im Java-Ökosystem gibt es für diese Aufgaben zahlreiche ausgereifte Bibliotheken und Frameworks. In diesem Artikel werden wir die wichtigsten Werkzeuge, ihre Besonderheiten und praktische Codebeispiele im Detail besprechen.



1. Grundlegende Begriffe

Bevor wir zu den Werkzeugen übergehen, ist es wichtig, die Begriffe klar zu trennen:

  • Authentifizierung — Überprüfung der Identität eines Benutzers (Wer sind Sie?). Erfolgt in der Regel über Login/Passwort, Token oder Biometrie.
  • Autorisierung — Überprüfung der Zugriffsrechte (Was ist Ihnen erlaubt?). Bestimmt, ob ein Benutzer bestimmte Aktionen ausführen darf.


2. Spring Security — De-facto-Standard

Spring Security ist das beliebteste Framework für die Sicherheit in Java-Anwendungen. Es bietet eine umfassende Lösung sowohl für die Authentifizierung als auch für die Autorisierung.



2.1. Grundlegende Authentifizierungskonfiguration

Um Spring Security einzubinden, fügen Sie die Abhängigkeit in Ihre pom.xml ein:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-security</artifactId></dependency>


Minimale Konfiguration mit In-Memory-Authentifizierung:

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.core.userdetails.User;import org.springframework.security.core.userdetails.UserDetails;import org.springframework.security.provisioning.InMemoryUserDetailsManager;import org.springframework.security.web.SecurityFilterChain;

@Configurationpublic class SecurityConfig {

@Bean public InMemoryUserDetailsManager userDetailsManager() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); }

@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(authz -> authz .requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasRole("USER") .anyRequest().authenticated() ) .formLogin(login -> login.defaultSuccessUrl("/home")) .httpBasic(); return http.build(); }}


3. JWT (JSON Web Tokens) für zustandslose Authentifizierung

JWT ermöglicht die Implementierung einer Authentifizierung ohne Zustandsspeicherung auf dem Server. Der Token enthält alle notwendigen Informationen über den Benutzer und wird mit einem geheimen Schlüssel signiert.



3.1. JWT-Generierung mit der jjwt-Bibliothek

Fügen Sie die Abhängigkeit hinzu:

<dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-api</artifactId>    <version>0.12.5</version></dependency>


Beispiel für die Erstellung und Überprüfung eines Tokens:

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import javax.crypto.SecretKey;import java.util.Date;

public class JwtUtil {

private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256); private static final long EXPIRATION_TIME = 3600000; // 1 Stunde

public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTi

Empfehlungen