Ktor 登录会话 cookie

时间:2021-04-11 08:40:45

标签: kotlin authentication ktor

我正在使用 ktor 进行登录项目。我目前正在使用会话的旧方法

    install(Sessions) {
    cookie<LoginSession>(
        "login_session",
        SessionStorageMemory()
    ){
        cookie.path = "/"
        cookie.extensions["SameSite"] = "lax"
        val secretSignKey = hex("000102030405060708090a0b0c0d0e0f")
        transform(SessionTransportTransformerMessageAuthentication(secretSignKey))

    }

}

此代码是最后一个,所以如果我删除 sessionmanager 和 secretsignkey,它将以纯文本形式显示它的值 剩下的很简单,我路由一个 get/login 来显示表单,一个 post/validate 来验证用户输入的数据,然后如果一切正常,我就设置会话。问题是我可以使用 inspect element -> application->cookie 查看会话值,我可以更改它的值,以便能够以任何用户身份登录,只需知道它的 id(在会话中我存储用户 id)。并且在到期列上它没有说会话。我究竟做错了什么? P.S:我已经阅读了身份验证功能的文档,但我想在会话中保持这个简单的想法。

1 个答案:

答案 0 :(得分:0)

使用 Ktor session transformer 转换(验证或加密)cookie 内容。

示例:

// REMEMBER! Change ALL the digits in those hex numbers and store them safely
val secretEncryptKey = hex("00112233445566778899aabbccddeeff")
val secretAuthKey = hex("02030405060708090a0b0c")
cookie<TestUserSession>(cookieName) {
    transform(SessionTransportTransformerEncrypt(secretEncryptKey, secretAuthKey))
}
相关问题