Skip to content

Ktor Server 中的 Bearer 認證

所需依賴項: io.ktor:ktor-server-auth

程式碼範例: auth-bearer

原生伺服器
Ktor 支援 Kotlin/Native,允許您在不需額外執行時或虛擬機器的情況下執行伺服器。
支援: ✅

Bearer 認證方案是 HTTP 框架 的一部分,用於存取控制與認證。此方案涉及稱為 Bearer 權杖(bearer tokens)的安全權杖。Bearer 認證方案作為 OAuthJWT 的一部分使用,但您也可以提供自訂邏輯來授權 Bearer 權杖。

您可以在 Ktor Server 中的認證與授權 部分取得有關 Ktor 中認證的一般資訊。

Bearer 認證應僅透過 HTTPS/TLS 使用。

新增依賴項

若要啟用 bearer 認證,您需要將 ktor-server-auth artifact 包含在建構腳本中:

Kotlin
Groovy
XML

Bearer 認證流程

通常,Bearer 認證流程可能如下所示:

  1. 使用者成功認證並授權存取後,伺服器會將存取權杖傳回給客戶端。
  2. 客戶端可以使用 Bearer 模式,在 Authorization 標頭中傳遞權杖,向受保護資源發出請求。
HTTP
GET http://localhost:8080/
Authorization: Bearer abc123
  1. 伺服器接收請求並驗證權杖。
  2. 驗證後,伺服器回應受保護資源的內容。

安裝 Bearer 認證

若要安裝 bearer 認證提供者,請在 install 區塊內呼叫 bearer 函數:

kotlin
import io.ktor.server.application.*
import io.ktor.server.auth.*
// ...
install(Authentication) {
    bearer {
        // Configure bearer authentication
    }
}

您可以選擇指定一個 提供者名稱,該名稱可用於認證指定路由

配置 Bearer 認證

若要了解如何在 Ktor 中配置不同的認證提供者,請參閱 配置認證。在本節中,我們將探討 bearer 認證提供者的配置細節。

步驟 1:配置 Bearer 提供者

bearer 認證提供者透過 BearerAuthenticationProvider.Configuration 類別公開其設定。在下面的範例中,指定了以下設定:

  • realm 屬性設定要在 WWW-Authenticate 標頭中傳遞的 realm。
  • authenticate 函數檢查客戶端傳送的權杖,並在認證成功的情況下傳回 UserIdPrincipal,或在認證失敗時傳回 null
kotlin
install(Authentication) {
    bearer("auth-bearer") {
        realm = "Access to the '/' path"
        authenticate { tokenCredential ->
            if (tokenCredential.token == "abc123") {
                UserIdPrincipal("jetbrains")
            } else {
                null
            }
        }
    }
}

步驟 2:保護特定資源

配置完 bearer 提供者後,您可以使用 authenticate 函數來保護應用程式中的特定資源。在認證成功的情況下,您可以在路由處理程式內部使用 call.principal 函數擷取已認證的 UserIdPrincipal,並取得已認證使用者的名稱。

kotlin
routing {
    authenticate("auth-bearer") {
        get("/") {
            call.respondText("Hello, ${call.principal<UserIdPrincipal>()?.name}!")
        }
    }
}