Autorisierung und Authentifizierung in Kotlin: Bibliotheken und Best Practices

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 Kotlin: Überblick über Tools und praktische Beispiele



In der modernen Webentwicklung mit Kotlin beginnt die Anwendungssicherheit mit der korrekten Implementierung von Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Überprüfung der Zugriffsrechte). In diesem Artikel werden wir die wichtigsten Bibliotheken und Ansätze zur Erstellung sicherer Anwendungen in Kotlin detailliert besprechen – sowohl für den Serverteil (Ktor, Spring Boot) als auch für mobile Android-Anwendungen.



1. Grundlegende Konzepte: Authentication vs Authorization

Authentifizierung (Authentication) ist der Prozess der Überprüfung, wer der Benutzer ist (Login + Passwort, Token, Biometrie).
Autorisierung (Authorization) ist die Bestimmung, welche Ressourcen und Aktionen einem authentifizierten Benutzer zur Verfügung stehen (Rollen, Rechte).



In Kotlin werden beide Aufgaben mit spezialisierten Bibliotheken gelöst, die wir im Folgenden betrachten.



2. Authentifizierung in Ktor (Server-Framework)

Ktor ist ein moderner asynchroner Server von JetBrains. Es bietet ein integriertes Modul ktor-server-auth für die Authentifizierung.



Abhängigkeit installieren (Gradle)

implementation("io.ktor:ktor-server-auth:$ktor_version")implementation("io.ktor:ktor-server-auth-jwt:$ktor_version") // für JWT


Beispiel: Authentifizierung mit JWT-Token

import io.ktor.server.auth.*import io.ktor.server.auth.jwt.*import com.auth0.jwk.JwkProviderimport io.ktor.server.application.*

fun Application.configureAuth() { install(Authentication) { jwt("auth-jwt") { val jwkProvider = JwkProvider("https://your-auth-domain/.well-known/jwks.json") verifier(jwkProvider) validate { credential -> if (credential.payload.audience.contains("my-app")) { JWTPrincipal(credential.payload) } else null } } }}

// In Routen:authenticate("auth-jwt") { get("/protected") { val principal = call.principal<JWTPrincipal>() call.respondText("Zugriff gewährt für Benutzer: ${principal?.payload?.subject}") }}


3. Spring Security für Kotlin

Spring Security ist der De-facto-Standard für die Sicherung von Spring Boot-Anwendungen. In Kotlin wird es mit DSL-Konfiguration verwendet.



Hinzufügen zum Projekt (Gradle)

implementation("org.springframework.boot:spring-boot-starter-security")implementation("org.springframework.boot:spring-boot-starter-web")


SecurityConfig-Konfiguration in Kotlin

import org.springframework.context.annotation.Beanimport org.springframework.context.annotation.Configurationimport org.springframework.security.config.annotation.web.builders.HttpSecurityimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurityimport org.springframework.security.core.userdetails.Userimport org.springframework.security.provisioning.InMemoryUserDetailsManagerimport org.springframework.security.web.SecurityFilterChain

@Configuration@EnableWebSecurityclass SecurityConfig {

@Bean fun filterChain(http: HttpSecurity): SecurityFilterChain { http .authorizeHttpRequests { auth -> auth.requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasAnyRole("USER", "ADMIN") .anyRequest().authenticated() } .httpBasic() return http.build() }

@Bean fun users(): InMemoryUserDetailsManager { val user = User.withDefaultPasswordEncoder() .username("user").password("pass").roles("USER").build() val admin = User.withDefaultPasswordEncoder() .username("admin").password("admin").roles("ADMIN").build() return InMemoryUserDetailsManager(user, adm

Empfehlungen