0Pricing
Kotlin Academy · Pelajaran

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 di validate
  • Sesi: berstatus; gunakan call.sessions.set() saat login dan clear() saat logout
  • Gunakan challenge untuk 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

  1. Penyiapan Proyek Ktor: embeddedServer dan Modul Application
  2. Routing dan Parameter Bertipe
  3. Negosiasi Konten dan kotlinx.serialization
  4. Plugin Autentikasi: JWT dan Sesi
← Kembali ke Kotlin Academy