Authentication-plugins: JWT og sessioner
Sikr Ktor-routes med JWT bearer-tokens og sessionsbaseret authentication.
Authentication-plugins: JWT og sessioner er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Oversigt over Ktor-autentificering
Ktors Authentication-plugin giver en samlet API til at beskytte ruter. Du konfigurerer en eller flere udbydere (JWT, Session, Basic, OAuth osv.) og omslutter derefter ruterne i en authenticate("providerName") { }-blok.
Tilføj autentificeringsafhængigheder
Tilføj bibliotekerne til autentificering og JWT til din byggekonfiguration:
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")
}Konfiguration af JWT-autentificering
Installér Authentication-plugin'et, og konfigurer en JWT-udbyder. verifier validerer tokenets signatur, mens validate udtrækker principalen fra payloaden:
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
}
}
}Beskyt ruter med JWT
Omslut en hvilken som helst rutegruppe i authenticate("auth-jwt") { }. Ikke-autentificerede forespørgsler får automatisk et 401-svar:
routing {
authenticate("auth-jwt") {
get("/protected") {
val principal = call.principal<JWTPrincipal>()!!
val username = principal.payload.getClaim("username").asString()
call.respondText("Hello, $username")
}
}
}Udstedelse af et JWT-token
Generér og signér en JWT på login-endpointet ved hjælp af java-jwt-biblioteket:
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))
}Sessionsautentificering
Sessioner gemmer brugerens tilstand på serversiden (eller på klientsiden som signerede cookies). Installér Sessions-plugin'et, og definér en dataklasse til sessionsdata:
data class UserSession(val userId: Long, val username: String)
install(Sessions) {
cookie<UserSession>("user_session") {
cookie.path = "/"
cookie.httpOnly = true
}
}Konfiguration af en udbyder til sessionsautentificering
Opret en udbyder til sessionsautentificering, som læser sessionen og returnerer en principal:
install(Authentication) {
session<UserSession>("auth-session") {
validate { session -> session }
challenge { call.respond(HttpStatusCode.Unauthorized) }
}
}Angivelse og rydning af sessioner
Angiv en session efter login med call.sessions.set(), og ryd den ved udlogning med 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 eller session: Hvornår skal du bruge hvad
JWT: tilstandsløs og velegnet til API'er, der bruges af mobil- og SPA-klienter. Tokenet indeholder alle claims, så serveren ikke har brug for et sessionslager. Sessioner: tilstandsbaserede og velegnede til serverside-renderede webapps. Sessions-ID'et ligger i en cookie, mens serveren gemmer dataene (i hukommelsen, Redis eller en database).
Kombination af flere autentificeringsudbydere
Du kan definere flere udbydere og kræve en hvilken som helst af dem med authenticate("jwt", "session") { }. Ktor prøver dem i rækkefølge og accepterer forespørgslen, hvis en af udbyderne validerer den korrekt.
Tilpassede udfordringssvar
Hver udbyder har en challenge-blok, som definerer, hvad der skal ske, når autentificeringen mislykkes. Returnér en 401 med et JSON-fejlindhold i stedet for standardheaderen WWW-Authenticate:
jwt("auth-jwt") {
// ...
challenge { _, _ ->
call.respond(HttpStatusCode.Unauthorized, mapOf("error" to "Token expired or invalid"))
}
}Hurtigt tjek
Hvad gør validate-blokken i en Ktor-JWT-udbyder?
Opsummering: Autentificeringsplugins — JWT og sessioner
Vigtigste pointer:
- Installér
Authentication, og konfigurer udbydere (jwt, session, basic, oauth) - Beskyt ruter med
authenticate("providerName") { } - JWT: tilstandsløse tokens; signér ved login, verificér med
verifier, og læs claims ivalidate - Sessioner: tilstandsbaserede; brug
call.sessions.set()ved login ogclear()ved udlogning - Brug
challengetil at tilpasse formatet for 401-svaret
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Authentication-plugins: JWT og sessioner” gratis?
Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “Authentication-plugins: JWT og sessioner”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Authentication-plugins: JWT og sessioner”?
Sikr Ktor-routes med JWT bearer-tokens og sessionsbaseret authentication. Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Kotlin Academy?
Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Authentication-plugins: JWT og sessioner”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?
Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Ktor-projektopsætning: embeddedServer og Application-moduler
- Routing og typede parametre
- Content Negotiation og kotlinx.serialization
- Authentication-plugins: JWT og sessioner