Ktor Server 中的 Bearer 認證
所需依賴項: io.ktor:ktor-server-auth
程式碼範例: auth-bearer
原生伺服器支援: ✅ Ktor 支援 Kotlin/Native,允許您在不需額外執行時或虛擬機器的情況下執行伺服器。
Bearer 認證方案是 HTTP 框架 的一部分,用於存取控制與認證。此方案涉及稱為 Bearer 權杖(bearer tokens)的安全權杖。Bearer 認證方案作為 OAuth 或 JWT 的一部分使用,但您也可以提供自訂邏輯來授權 Bearer 權杖。
您可以在 Ktor Server 中的認證與授權 部分取得有關 Ktor 中認證的一般資訊。
Bearer 認證應僅透過 HTTPS/TLS 使用。
新增依賴項
若要啟用 bearer
認證,您需要將 ktor-server-auth
artifact 包含在建構腳本中:
Kotlin
Groovy
XML
Bearer 認證流程
通常,Bearer 認證流程可能如下所示:
- 使用者成功認證並授權存取後,伺服器會將存取權杖傳回給客戶端。
- 客戶端可以使用
Bearer
模式,在Authorization
標頭中傳遞權杖,向受保護資源發出請求。
HTTP
GET http://localhost:8080/
Authorization: Bearer abc123
- 伺服器接收請求並驗證權杖。
- 驗證後,伺服器回應受保護資源的內容。
安裝 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}!")
}
}
}