0Pricing
Kotlin Academy · Lektion

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 Authentication und 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 in validate auslesen
  • Sessions: zustandsbehaftet; call.sessions.set() beim Login und clear() 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

  1. Ktor-Projekt einrichten: embeddedServer und Application-Module
  2. Routing und typisierte Parameter
  3. Content Negotiation und kotlinx.serialization
  4. Authentifizierungs-Plugins: JWT und Session
← Zurück zu Kotlin Academy