Ktor Server 中的 Bearer 认证
所需依赖项:io.ktor:ktor-server-auth
代码示例: auth-bearer
原生服务器支持:✅ Ktor 支持 Kotlin/Native,并允许您在没有额外运行时或虚拟机的情况下运行服务器。
Bearer 认证方案是 HTTP 框架 的一部分,用于访问控制和认证。该方案涉及称为 Bearer 令牌的安全令牌。Bearer 认证方案可作为 OAuth 或 JWT 的一部分使用,但您也可以为授权 Bearer 令牌提供自定义逻辑。
您可以在 Ktor Server 中的认证和授权 部分获取有关 Ktor 认证的通用信息。
Bearer 认证仅应在 HTTPS/TLS 上使用。
添加依赖项
要启用 bearer
认证,您需要在构建脚本中包含 ktor-server-auth
artifact:
Kotlin
Groovy
XML
Bearer 认证流程
通常,Bearer 认证流程可能如下所示:
- 用户成功认证并授权访问后,服务器向客户端返回一个访问令牌。
- 客户端可以向受保护的资源发出请求,并在
Authorization
头中使用Bearer
方案传递令牌。HTTPGET 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}!")
}
}
}