GitBucketはOpenID Connectによるシングルサインオンに対応しているものの、これまで自分では一度も使ったことはなかったのですが、先日シングルサインオン関連のIssueへの対応の際に実際に試してみました。ここではプロバイダとしてKeycloakを使っていますが、以下のドキュメントではGoogle Identity Provider (Google Apps)やAzure ADを使用する場合の設定方法も説明されています。
まずは以下のページからKeycloakをダウンロードします。ここではkeycloak-20.0.2.zipをダウンロードしました。
ダウンロードしたファイルを適当な場所に展開後、bin/kc.sh
でKeyclockを起動します。GitBucketが8080ポートで動作するのでKeycloakは9000ポートで起動するようにします。
./bin/kc.sh start-dev --http-port 9000
Webブラウザでhttp://localhost:9000にアクセスすると以下のような画面が表示されます。
まず最初にKeycloakの管理ユーザを作成し、管理画面にログインしたらGitBucketから連携するために以下の設定でクライアントを追加します。
- Client type: OpenID Connect
- Client ID: gitbucket
- Valid redirect URIs: http://localhost:8080/signin/oidc
- Valid post logout redirect URIs: http://localhost:8080
- Client authentication: On
それから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上にユーザが作成されますので、その後管理者がユーザの設定を変更することで管理ユーザに切り替えることは可能です。