アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

【Ktor】HTTP(平文)環境でcookieのsecureをtrueに設定する

やろうとしたこと&エラー

サーバーから開発用PCにフォワードを設定していた。そこでcookiesecure = true を入れたかった。

val call: ApplicationCall by lazy { TODO() }
call.response.cookies.append(
    name = "key",
    value = "value",
    maxAge = 10.seconds.inWholeSeconds,
    domain = ServerEnv.domain,
    path = ".",
    secure = true,
)

以下のエラーが出た。
Exception while fetching data (/path/to/target) : You should set secure cookie only via secure transport (HTTPS)

解決

まずはサーバーのnginxに以下を追加した。

server {
        proxy_set_header X-Forwarded-SSL $https;
}

依存を追加(Gradle)

implementation("io.ktor:ktor-server-forwarded-header:$ktorVersion")

installする。

fun Application.myApplicationModule() {
    install(XForwardedHeaders)
}

一言

以下に書いてあるコメントに同意します。 secure=true はブラウザが判別するべきもので、サーバーが設定できないようにするのはどうなのかと思いました。
https://github.com/ktorio/ktor/issues/311#issuecomment-1422346111