Plugin Autentikasi: JWT dan Sesi
Amankan rute Ktor menggunakan token pembawa JWT dan autentikasi berbasis sesi.
Plugin Autentikasi: JWT dan Sesi adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Ikhtisar Autentikasi Ktor
Plugin Authentication Ktor menyediakan API terpadu untuk melindungi rute. Anda mengonfigurasi satu atau beberapa penyedia (JWT, Sesi, Basic, OAuth, dan sebagainya), lalu membungkus rute dalam blok authenticate("providerName") { }.
Menambahkan Dependensi Autentikasi
Tambahkan pustaka autentikasi dan JWT ke build Anda:
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")
}Mengonfigurasi Autentikasi JWT
Pasang plugin Authentication dan konfigurasikan penyedia JWT. verifier memvalidasi tanda tangan token; validate mengambil identitas utama dari muatan:
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
}
}
}Melindungi Rute dengan JWT
Bungkus grup rute apa pun dalam authenticate("auth-jwt") { }. Permintaan tanpa autentikasi secara otomatis menerima respons 401:
routing {
authenticate("auth-jwt") {
get("/protected") {
val principal = call.principal<JWTPrincipal>()!!
val username = principal.payload.getClaim("username").asString()
call.respondText("Hello, $username")
}
}
}Menerbitkan Token JWT
Buat dan tanda tangani JWT pada endpoint login menggunakan pustaka java-jwt:
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))
}Autentikasi Sesi
Sesi menyimpan status pengguna di sisi server (atau di sisi klien sebagai cookie bertanda tangan). Pasang plugin Sessions dan tentukan kelas data sesi:
data class UserSession(val userId: Long, val username: String)
install(Sessions) {
cookie<UserSession>("user_session") {
cookie.path = "/"
cookie.httpOnly = true
}
}Mengonfigurasi Penyedia Autentikasi Sesi
Buat penyedia autentikasi sesi yang membaca sesi dan mengembalikan identitas utama:
install(Authentication) {
session<UserSession>("auth-session") {
validate { session -> session }
challenge { call.respond(HttpStatusCode.Unauthorized) }
}
}Mengatur dan Menghapus Sesi
Atur sesi setelah login dengan call.sessions.set() dan hapus saat logout dengan 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 vs Sesi: Kapan Menggunakan Masing-Masing
JWT: tanpa status, cocok untuk API yang digunakan klien seluler/SPA. Token membawa semua klaim; server tidak memerlukan penyimpanan sesi. Sesi: berstatus, cocok untuk aplikasi web yang dirender server. ID sesi berada dalam cookie; server menyimpan datanya (memori, Redis, basis data).
Menggabungkan Beberapa Penyedia Autentikasi
Anda dapat menentukan beberapa penyedia dan mengharuskan salah satunya menggunakan authenticate("jwt", "session") { }. Ktor mencoba setiap penyedia sesuai urutan dan menerima permintaan jika salah satunya berhasil memvalidasi.
Respons Tantangan Khusus
Setiap penyedia memiliki blok challenge yang menentukan tindakan saat autentikasi gagal. Kembalikan respons 401 dengan isi kesalahan JSON, bukan header WWW-Authenticate bawaan:
jwt("auth-jwt") {
// ...
challenge { _, _ ->
call.respond(HttpStatusCode.Unauthorized, mapOf("error" to "Token expired or invalid"))
}
}Pemeriksaan Singkat
Apa fungsi blok validate dalam penyedia JWT Ktor?
Ringkasan: Plugin Autentikasi — JWT dan Sesi
Inti pembelajaran:
- Pasang
Authentication; konfigurasikan penyedia (jwt, session, basic, oauth) - Lindungi rute dengan
authenticate("providerName") { } - JWT: token tanpa status; tanda tangani saat login, verifikasi dengan
verifier, baca klaim divalidate - Sesi: berstatus; gunakan
call.sessions.set()saat login danclear()saat logout - Gunakan
challengeuntuk menyesuaikan format respons 401
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Plugin Autentikasi: JWT dan Sesi” gratis?
Ya — teks lengkap “Plugin Autentikasi: JWT dan Sesi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Plugin Autentikasi: JWT dan Sesi”?
Amankan rute Ktor menggunakan token pembawa JWT dan autentikasi berbasis sesi. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Kotlin Academy?
Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Plugin Autentikasi: JWT dan Sesi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?
Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penyiapan Proyek Ktor: embeddedServer dan Modul Application
- Routing dan Parameter Bertipe
- Negosiasi Konten dan kotlinx.serialization
- Plugin Autentikasi: JWT dan Sesi