【发布时间】:2022-02-08 16:04:10
【问题描述】:
对于上下文,我是 Java、Kotlin 和 Ktor 的新手(来自 C# 背景)。
我从我的构建中收到以下错误:
Exception in thread "main" io.ktor.server.application.MissingApplicationPluginException: Application plugin Authentication is not installed
有问题的代码部分是:
authenticate("auth-jwt") {
get("/hello") {
val principal = call.principal<JWTPrincipal>()
val username = principal!!.payload.getClaim("username").asString()
val expiresAt = principal.expiresAt?.time?.minus(System.currentTimeMillis())
call.respondText("Hello, $username! Token is expired at $expiresAt ms.")
}
}
它在authenticate 行失败
根据文档,我已在 build.gradle.kts 文件中添加了所需的插件:
dependencies {
implementation("io.ktor:ktor-server-core-jvm:$ktor_version")
implementation("io.ktor:ktor-server-host-common-jvm:$ktor_version")
implementation("io.ktor:ktor-server-content-negotiation-jvm:$ktor_version")
implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:$ktor_version")
implementation("io.ktor:ktor-serialization-gson-jvm:$ktor_version")
implementation("io.ktor:ktor-server-netty-jvm:$ktor_version")
implementation("io.ktor:ktor-server-auth:$ktor_version")
implementation("io.ktor:ktor-server-auth-jwt:$ktor_version")
implementation("ch.qos.logback:logback-classic:$logback_version")
testImplementation("io.ktor:ktor-server-test-host:$ktor_version")
testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlin_version")
}
这是我的configureSecurity 方法(取自在线示例):
fun Application.configureSecurity() {
val secret = System.getenv("JWT_SECRET")
val issuer = environment.config.property("jwt.issuer").getString()
val audience = environment.config.property("jwt.audience").getString()
val myRealm = environment.config.property("jwt.realm").getString()
authentication {
jwt("auth-jwt") {
verifier(
JWT
.require(Algorithm.HMAC256(secret))
.withAudience(audience)
.withIssuer(issuer)
.build()
)
validate { credential ->
if (credential.payload.getClaim("username").asString() != "") {
JWTPrincipal(credential.payload)
} else {
null
}
}
}
}
}
在过去的九个小时里,我一直在努力解决这个问题,在网上彻底搜索,这是我最后的手段。
我正在使用从 IntelliJ IDEA 中的项目创建向导创建的 Beta 2.0 示例代码。
如何在 ktor 服务器上正确配置 JWT 身份验证?
【问题讨论】:
-
Online docs 和 example 说应该是
install(Authentication) {...}而不是authentication { ... }。对于 2.0.0,它是 the same。此外,请确保此调用确实发生。 -
感谢您的评论。我还尝试了安装(身份验证),结果相同。不过,我需要检查以确保它确实被调用了。
标签: kotlin authentication jwt ktor