authentikでVaultwardenのSSOを試す

本エントリは、調査メモに SSO の設定を追加し、整理したもの。

要約

概要

試した SSO 実装について

リポジトリはこちら: Timshel/vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs

試したバージョン: コミット ID 09a399f8c5badb3200759622a543fcb106840404

2 つのフロントエンド実装がある。

  1. Bitwardenと同じ認証フロー(e-mail入力し画面遷移 → マスターパスワードを入力する画面でSSOのボタンが表示される。)
  1. デフォルトのログインページを /sso に変更

SSO 関連の環境変数は以下の通り1

## SSO settings (OpenID Connect)
## Controls whether users can login using an OpenID Connect identity provider
# SSO_ENABLED=true
## Prevent users from logging in directly without going through SSO
# SSO_ONLY=false
## Auto accept organization invitation, if set to false you will need
##	- to let user log using email+Master password (SSO_ONLY=false)
##	- use a patched frontend to allow the invitation to be preserved across the sso redirection
# SSO_ACCEPTALL_INVITES=false
## Base URL of the OIDC server (auto-discovery is used)
# SSO_AUTHORITY=https://auth.example.com
## Set your Client ID and Client Key
# SSO_CLIENT_ID=11111
# SSO_CLIENT_SECRET=AAAAAAAAAAAAAAAAAAAAAAAA
## Optional SSO public key for JWT validation
# SSO_KEY_FILEPATH=%DATA_FOLDER%/sso_key.pub.pem

動作に関して

SSO_ONLY=true にした場合

e-mail + マスターパスワードによる認証を試みると、下図のようなエラーメッセージが表示される。

SSO_ONLY=true

モバイルアプリでも同様のエラーメッセージが表示される。

フロントエンド実装2

初期アクセス画面で下図のように SSO を促される。

フロントエンド実装2

上記画面でキャンセルをクリックすると、通常の認証フロー(e-mail + マスターパスワード)となる。

こちらの実装を利用するには、以下のように Dockerfile を書き換える。(README より)

sed -i 's/oidc_button_web_vault/oidc_overide_web_vault/' Dockerfile

authentik の設定

authentik にログインし、Admin interface を表示する(下図の赤枠をクリックする)。

Admin interface

左上のハンバーガーメニュー → Applications → Providers → Create という順番でクリックする。

Createボタンをクリックする

OAuth2/OpenID Provider を選択する。

OAuth2/OpenIDを選択する

OAuth2/OpenID Provider の各項目を設定する。
(下図は項目の一部)

Providerの各項目を設定する

Provider 一覧にある作成した Provider → Assigned to application の Create の順番でクリックする。

アプリケーションを作成する

Application の各項目を設定する。

アプリケーションの各項目を設定する

Application の作成後、作成した Provider を再度表示すると、OpenID Configuration Issuer に値が設定される。 この値は、Vaultwarden の設定(SSO_AUTHORITY)に使用する。

おわりに

試した範囲では問題がなく、とてもよい体験だった。
現在は Vaultwarden の公式イメージを利用しているが、今回試した SSO 実装のものに置き換えたいとさえ思っている。

本家にマージされないかな。