Ktor会话Cookie身份验证

时间:2019-06-14 06:41:36

标签: kotlin ktor

我想使用会话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身份验证?

谢谢

1 个答案:

答案 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 } } } basicform,因此您可能想尝试类似的方法来进行表单身份验证,例如:< / p>

jwt

检查official documentation以获得更多信息。