我想使用会话cookie进行Ktor身份验证,到目前为止,我的工作是:
private const val SEVER_PORT = 8082
private const val SESSION_COOKIE_NAME = "some-cookie-name"
data class AuthSession(
val authToken: String
)
fun main() {
embeddedServer(Netty, port = SEVER_PORT, module = Application::basicAuthApplication).start(wait = true)
}
fun Application.basicAuthApplication() {
install(Sessions) {
cookie<AuthSession>(SESSION_COOKIE_NAME, SessionStorageMemory()) {
cookie.path = "/"
}
}
install(DefaultHeaders)
install(CallLogging)
install(Authentication) {
session<AuthSession> {
validate { session ->
// TODO: do the actual validation
null
}
}
}
routing {
authenticate {
get("/") {
call.respondText("Success")
}
}
}
}
但是每次我这样做:
curl -v localhost:8082
我得到一个HTTP 200和响应“成功”
我希望获得未授权的HTTP 401或类似的内容。
有人可以在这里给我一些见解,如何使用Ktor进行正确的会话cookie身份验证?
谢谢
答案 0 :(得分:2)
更新:
好吧,我意识到存在session
身份验证类型,该类型未与身份验证功能文档一起记录。
当前代码的问题是您没有明确指定challenge
,内部指定的默认质询是SessionAuthChallenge.Ignore
,因此您必须将其更改为SessionAuthChallenge.Unauthorized
或{{1 }}
因此您的代码应如下所示:
SessionAuthChallenge.Redirect
OLD:
您未指定要使用的身份验证类型,可能是install(Authentication) {
session<AuthSession> {
challenge = SessionAuthChallenge.Unauthorized
validate { session ->
// TODO: do the actual validation
null
}
}
}
,basic
或form
,因此您可能想尝试类似的方法来进行表单身份验证,例如:< / p>
jwt
检查official documentation以获得更多信息。