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:
- Der Benutzer sendet Login/Passwort.
- Der Server überprüft die Daten und gibt ein JWT-Token zurück.
- Der Client speichert das Token (z. B. im localStorage) und sendet es im Header
Authorization: Bearer <token>. - 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
Auch in der Bibliothek
Arbeit mit Apache Kafka in Node.js: Bibliothek KafkaJS
Caching in Go (Golang): Redis, In-Memory und andere Lösungen
Arbeiten mit CSV in C# (.NET): Vollständige Anleitung
Internationalisierung (i18n) in JavaScript (Node.js): Die Bibliothek i18next
Juniper: Elegante GraphQL-Bibliothek in Rust für moderne Webanwendungen