既にWebサーバとして立ち上がってるサービスに後付で認証を追加したいという案件。
雑にやるなら前段にnginxでも立ててbasic認証でもかけるのが楽なんだけど、まあ21世紀なのでもっとマイクロサービス的なソリューションとしてloginsrvを用いたdockerの構成を試してみた。
https://hub.docker.com/r/tarent/loginsrv/
てっきり単体でリバースプロキシ的なことまでやってくれるものだと思いこんでいたけど、こいつはあくまで認証構造の提供とcookieへのトークンの保存だけ。なので、今回の案件ではプロキシと組み合わせる形で対応。
https://hub.docker.com/r/ubergarm/openresty-nginx-jwt/
githubリポジトリからnginx.confとbearer.luaを拾い、用途に合わせて編集。具体的にはトークンをパラメータから拾う記述になっていたのをcookieから拾う形に書き換えたり、認証エラー時にリダイレクトするようにしたり。
結果的には、前段にopenresty-nginx、非ログイン時に/loginパスにリダイレクトしてloginsrvで認証、認証後はそのままアプリに流す感じに。
ログイン状態をアプリ側で持たないで良いのは、複数のバックエンドを組み合わせて使うマイクロサービス的なアプローチに活かしやすそうで良いですな。
これもそのうち整理して技術ブログの方にメモしたい。