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 Auch in der Bibliothek
Arbeit mit Kafka in JavaScript (Node.js): Bibliothek node-rdkafka
Arbeiten mit Excel in C# (.NET): Bibliotheken EPPlus und ClosedXML