Authentifizierungs-Plugins: JWT und Session
Sichern Sie Ktor-Routen mit JWT-Bearer-Tokens und sitzungsbasierter Authentifizierung.
Authentifizierungs-Plugins: JWT und Session ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick über die Ktor-Authentifizierung
Das Ktor-Authentication-Plugin stellt eine einheitliche API zum Absichern von Routen bereit. Sie konfigurieren einen oder mehrere Provider (JWT, Session, Basic, OAuth usw.) und umschließen die Routen anschließend mit einem authenticate("providerName") { }-Block.
Authentifizierungsabhängigkeiten hinzufügen
Fügen Sie Ihrem Build die Authentifizierungs- und JWT-Bibliotheken hinzu:
dependencies {
implementation("io.ktor:ktor-server-auth:2.3.12")
implementation("io.ktor:ktor-server-auth-jwt:2.3.12")
implementation("io.ktor:ktor-server-sessions:2.3.12")
}JWT-Authentifizierung konfigurieren
Installieren Sie das Authentication-Plugin und konfigurieren Sie einen JWT-Provider. Der verifier validiert die Token-Signatur, während validate den Principal aus der Payload extrahiert:
install(Authentication) {
jwt("auth-jwt") {
realm = "ktor app"
verifier(
JWT.require(Algorithm.HMAC256(secret))
.withAudience(audience)
.withIssuer(issuer)
.build()
)
validate { credential ->
if (credential.payload.getClaim("username").asString() != null)
JWTPrincipal(credential.payload)
else null
}
}
}Routen mit JWT schützen
Umschließen Sie jede Routengruppe mit authenticate("auth-jwt") { }. Nicht authentifizierte Anfragen erhalten automatisch eine 401-Antwort:
routing {
authenticate("auth-jwt") {
get("/protected") {
val principal = call.principal<JWTPrincipal>()!!
val username = principal.payload.getClaim("username").asString()
call.respondText("Hello, $username")
}
}
}Ein JWT-Token ausstellen
Generieren und signieren Sie ein JWT am Login-Endpunkt mithilfe der java-jwt-Bibliothek:
post("/login") {
val user = call.receive<LoginRequest>()
// validate credentials ...
val token = JWT.create()
.withAudience(audience)
.withIssuer(issuer)
.withClaim("username", user.username)
.withExpiresAt(Date(System.currentTimeMillis() + 3_600_000))
.sign(Algorithm.HMAC256(secret))
call.respond(mapOf("token" to token))
}Session-Authentifizierung
Sessions speichern den Benutzerstatus serverseitig (oder clientseitig als signierte Cookies). Installieren Sie das Sessions-Plugin und definieren Sie eine Session-Datenklasse:
data class UserSession(val userId: Long, val username: String)
install(Sessions) {
cookie<UserSession>("user_session") {
cookie.path = "/"
cookie.httpOnly = true
}
}Session-Auth-Provider konfigurieren
Erstellen Sie einen Session-Authentifizierungsprovider, der die Session liest und einen Principal zurückgibt:
install(Authentication) {
session<UserSession>("auth-session") {
validate { session -> session }
challenge { call.respond(HttpStatusCode.Unauthorized) }
}
}Sessions setzen und löschen
Setzen Sie nach dem Login eine Session mit call.sessions.set() und löschen Sie sie beim Logout mit call.sessions.clear:
post("/login") {
val creds = call.receive<LoginRequest>()
// validate ...
call.sessions.set(UserSession(userId = 1L, username = creds.username))
call.respond(HttpStatusCode.OK)
}
post("/logout") {
call.sessions.clear<UserSession>()
call.respond(HttpStatusCode.OK)
}JWT oder Session: Wann welches Verfahren geeignet ist
JWT: zustandslos und gut für APIs geeignet, die von mobilen Clients oder SPA-Clients genutzt werden. Das Token enthält alle Claims; der Server benötigt keinen Session-Speicher. Sessions: zustandsbehaftet und gut für serverseitig gerenderte Webanwendungen geeignet. Die Session-ID befindet sich im Cookie, während der Server die Daten hält (im Speicher, in Redis oder in einer Datenbank).
Mehrere Auth-Provider kombinieren
Sie können mehrere Provider definieren und mit authenticate("jwt", "session") { } jeden davon zulassen. Ktor probiert sie der Reihe nach aus und akzeptiert die Anfrage, sobald ein Provider sie erfolgreich validiert.
Benutzerdefinierte Challenge-Antworten
Jeder Provider verfügt über einen challenge-Block, der festlegt, was bei einem fehlgeschlagenen Authentifizierungsversuch geschehen soll. Geben Sie eine 401-Antwort mit einem JSON-Fehler-Body zurück, statt den standardmäßigen WWW-Authenticate-Header zu verwenden:
jwt("auth-jwt") {
// ...
challenge { _, _ ->
call.respond(HttpStatusCode.Unauthorized, mapOf("error" to "Token expired or invalid"))
}
}Kurzer Check
Was macht der validate-Block in einem Ktor-JWT-Provider?
Zusammenfassung: Authentifizierungs-Plugins – JWT und Session
Wichtigste Erkenntnisse:
- Installieren Sie
Authenticationund konfigurieren Sie Provider (jwt, session, basic, oauth) - Schützen Sie Routen mit
authenticate("providerName") { } - JWT: zustandslose Tokens; beim Login signieren, mit
verifierüberprüfen und Claims invalidateauslesen - Sessions: zustandsbehaftet;
call.sessions.set()beim Login undclear()beim Logout - Verwenden Sie
challenge, um das Format der 401-Antwort anzupassen
Häufig gestellte Fragen
Ist die Lektion „Authentifizierungs-Plugins: JWT und Session“ kostenlos?
Ja — der vollständige Text von „Authentifizierungs-Plugins: JWT und Session“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Authentifizierungs-Plugins: JWT und Session“?
Sichern Sie Ktor-Routen mit JWT-Bearer-Tokens und sitzungsbasierter Authentifizierung. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Authentifizierungs-Plugins: JWT und Session“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Ktor-Projekt einrichten: embeddedServer und Application-Module
- Routing und typisierte Parameter
- Content Negotiation und kotlinx.serialization
- Authentifizierungs-Plugins: JWT und Session