GitBucketとKeycloakでシングルサインオンを試してみる

GitBucketはOpenID Connectによるシングルサインオンに対応しているものの、これまで自分では一度も使ったことはなかったのですが、先日シングルサインオン関連のIssueへの対応の際に実際に試してみました。ここではプロバイダとしてKeycloakを使っていますが、以下のドキュメントではGoogle Identity Provider (Google Apps)やAzure ADを使用する場合の設定方法も説明されています。

github.com

まずは以下のページからKeycloakをダウンロードします。ここではkeycloak-20.0.2.zipをダウンロードしました。

www.keycloak.org

ダウンロードしたファイルを適当な場所に展開後、bin/kc.shでKeyclockを起動します。GitBucketが8080ポートで動作するのでKeycloakは9000ポートで起動するようにします。

./bin/kc.sh start-dev --http-port 9000

Webブラウザhttp://localhost:9000にアクセスすると以下のような画面が表示されます。

まず最初にKeycloakの管理ユーザを作成し、管理画面にログインしたらGitBucketから連携するために以下の設定でクライアントを追加します。

それからGitBucketからログインするユーザをKeycloak上で登録しておきます。GitBucketからログインできるようにするためにはEmailを登録しておく必要があります。

続いてGitBucket側の設定を行います。管理ユーザでログインし、システム設定のAuthenticationタブでOpenID Connect連携を有効にし、以下の設定を行います。

  • Issuer: http://localhost:8080/realms/master
  • Client ID: gitbucket
  • Client secret: KeycloakのgitbucketクライアントのCredentialsタブから取得したものを入力
  • Expected signature algorithm: RS256

一度ログアウトしてログイン画面を表示すると以下のように"Sign in with OpenID Connect"というボタンが表示されているのでこのボタンをクリックするとKeycloakを使用してOpenID ConnectによるシングルサインオンでGitBucketにログインできます。

なお、OpenID ConnectでログインするユーザはGitBucket上では一般ユーザになります。一度ログインするとGitBucket上にユーザが作成されますので、その後管理者がユーザの設定を変更することで管理ユーザに切り替えることは可能です。