オンプレRedmineにGoogleアカウントでログイン
AzureADアカウントでのログインは
以前
投稿しましたが、
Googleアカウントでのログインは書いてなかったなと思いましたので書きました。
Redmineは
sameersbn/redmine
のコンテナを利用させてもらって
docker-composeで構築します。
デフォルトから自己証明書のHTTPSでアクセスするために
nginxのリバースプロキシを加えたりしていますので
こちらの投稿
を参考にしてください。
docker-compose.ymlは最後に丸ごと記載しています。
ちなみにRedmineのバージョンは4.1.0で確認しています。
GCP側の準備
Google OAuth2は
こちら
で公開されているプラグインを利用させていただきます。
更新がストップしてからかなり経つようですが、4.1系でも動くようです。
適当なプロジェクトを作成しましたら、Google API Consoleにアクセスして、OAuth同意画面に進みます。
ユーザーの種類は、今回はテストなので外部としています。
次に、認証情報にて「認証情報を作成」⇒「OAuth クライアント ID」に進みます。
こちらで入力する内容はプラグインのページを参考にしてください。
僕の環境では以下のようになりますが、ドメインなど各自の環境に合わせて変更してください。
承認済みのJavaScript生成元 : https://example.tsuchinokometal.com
承認済みのリダイレクトURI : https://example.tsuchinokometal.com/redmine/oauth2callback
作成すると、以下の画面が表示されるので、クライアントIDとシークレットをメモっておいてください。
Redmine Omniauth Google pluginのインストール
Redmineコンテナにプラグインをインストールします。
ボリュームにあるpluginsフォルダで以下のコマンドを実行してください。
(あとで出てくるdocker-compose.ymlの場合だと、./volumes/redmine/plugins/ですね)
$ git clone https://github.com/twinslash/redmine_omniauth_google.git
$ docker restart redmine
システム管理者でログインしてプラグインを確認すると、
「Redmine Omniauth Google plugin」が追加させていますので、設定に進みます。
作成したクライアントIDとシークレットを入力します。
G Suiteを利用している場合は、Available domainsに独自ドメインを入力してください。
ログオフしてログイン画面を表示すると、
以下のように「Login via Google」ボタンが表示されますので、
そこをクリックするとシングルサインオンすることができます。
認証画面が出ますので、自分のGoogleアカウントで認証してみてください。
うまくいけばユーザー登録画面が表示されます。
ローカルにユーザーを作成してGoogleアカウントでも認証できるようにする形となります。
試しに設定したパスワードとログインIDでもログインできることは確認しました。
個人的には内部認証できなくしてGoogle OAuth2による認証だけにしたいんですが、
できないんですかね。
ちなみにアカウント登録を自動化しないとシステム管理者で承認しないと登録されません。
今回使用したdocker-compose.ymlです。
ポイントはnginxを使っているところと、
REDMINE_HTTPS=true
REDMINE_RELATIVE_URL_ROOT=/redmine
としているところですかね。
version: '3'
services:
redmine_postgresql:
image: sameersbn/postgresql:9.6-4
container_name: redmine_postgresql
environment:
- DB_USER=redmine
- DB_PASS=password
- DB_NAME=redmine_production
volumes:
- ./volumes/postgresql:/var/lib/postgresql
redmine:
image: sameersbn/redmine:4.1.0
container_name: redmine
depends_on:
- redmine_postgresql
environment:
- TZ=Asia/Tokyo
- DB_ADAPTER=postgresql
- DB_HOST=redmine_postgresql
- DB_PORT=5432
- DB_USER=redmine
- DB_PASS=password
- DB_NAME=redmine_production
- REDMINE_PORT=10083
- REDMINE_HTTPS=true
- REDMINE_RELATIVE_URL_ROOT=/redmine
- REDMINE_SECRET_TOKEN=
- REDMINE_SUDO_MODE_ENABLED=false
- REDMINE_SUDO_MODE_TIMEOUT=15
- REDMINE_CONCURRENT_UPLOADS=2
- REDMINE_BACKUP_SCHEDULE=
- REDMINE_BACKUP_EXPIRY=
- REDMINE_BACKUP_TIME=
- SMTP_ENABLED=false
- SMTP_METHOD=smtp
- SMTP_DOMAIN=www.example.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=mailer@example.com
- SMTP_PASS=password
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=:login
- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=mailer@example.com
- IMAP_PASS=password
- IMAP_SSL=true
- IMAP_INTERVAL=30
ports:
- "10083:80"
volumes:
- ./volumes/redmine:/home/redmine/data
nginx2:
image: nginx
container_name: nginx2
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./certs:/certs
ports:
- "80:80"
- "443:443"