やりたいこと
MicronautでSessionベースの認証の仕方については、Micronaut SecurityのSession項目に記載されている.
しかし、発行されるCookieの設定(name, path, expire, samesiteなど)について設定したいのに、設定方法が記載されていない.
JWTについては、記載されているのに記載されていないので、どうやれば設定できるかを調べたので説明します。
設定方法
調査すると、HttpSessionに関しては、HttpSessionConfigurationというのがあり、これは、CookieConfigurationインタフェースを実装しているので、これの設定方法が分かればいいことがわかります。
HttpSessionConfigurationは、@ConfigurationProperties(value="http")
となっているので、httpのキー配下にCookieConfigurationの項目を設定すればいいことがわかります。
また、HttpSessionConfigurationは、SessionConfigurationを継承しており、SessionConfigurationは@ConfigurationProperties(value="micronaut.session")
となっているので、micronaut.session.httpに設定すればいいことがわかりました。
実際に試してみます。
未設定の場合(デフォルト)
$ curl -X POST -i \
> -H "Content-Type: application/json" \
> -d '{"username": "test", "password": "test"}' \
> http://localhost:8080/login
HTTP/1.1 303 See Other
Location: /login-success
Authorization-Info: 44e65657-e86b-4215-9f83-4edd4ae22ea0
set-cookie: SESSION=NDRlNjU2NTctZTg2Yi00MjE1LTlmODMtNGVkZDRhZTIyZWEw; Path=/; HTTPOnly
Date: Sat, 24 Apr 2021 11:12:18 GMT
connection: keep-alive
transfer-encoding: chunked
キー名は、SESSIONでPathは/で、HTTPOnlyが設定された状態です。
設定した場合
micronaut:
session:
http:
cookie-name: MYSESSION
cookie-path: /api/
cookie-secure: true
cookie-same-site: Strict
$ curl -X POST -i \
> -H "Content-Type: application/json" \
> -d '{"username": "test", "password": "test"}' \
> http://localhost:8080/login
HTTP/1.1 303 See Other
Location: /login-success
Authorization-Info: b628cd4c-3e77-4daa-9860-8ed686fe40dd
set-cookie: MYSESSION=YjYyOGNkNGMtM2U3Ny00ZGFhLTk4NjAtOGVkNjg2ZmU0MGRk; Path=/api/; Secure; HTTPOnly; SameSite=Strict
Date: Sat, 24 Apr 2021 11:09:50 GMT
connection: keep-alive
transfer-encoding: chunked
無事にキー名がMYSESSIONとなり、Path, Secure, SameSiteの設定を付加することができた。
Comments
Let's comment your feelings that are more than good