RedmineにAzureユーザでログイン
Docker for Macで試しました。
ちなみにAzureなどはまだまだ開発中らしくWebインターフェースがよく変わるので
以下のスクリーンショットとは異なる場合があります。
Redmineはdocker-composeを使ってサクッと構築します。
こちら
を利用させていただきました。
とりあえず動くことを確認するだけなのでほとんどそのままですが、
一応docker-compose.ymlを載せておきます
version: '2'
services:
postgresql:
image: sameersbn/postgresql:9.6-4
container_name: postgresql
environment:
- DB_USER=redmine
- DB_PASS=password
- DB_NAME=redmine_production
volumes:
- ./postgresql:/var/lib/postgresql
redmine:
image: sameersbn/redmine:4.0.5
container_name: redmine
depends_on:
- postgresql
environment:
- TZ=Asia/Tokyo
- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=redmine
- DB_PASS=password
- DB_NAME=redmine_production
- REDMINE_PORT=10083
- REDMINE_HTTPS=false
- REDMINE_RELATIVE_URL_ROOT=
- 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:
- ./redmine:/home/redmine/data
とりあえずhttp://localhost:10083 にアクセスしてRedmineが起動できていることを確認します。
次にRedmineにプラグインをインストールします。
こちら
のRedmine Omniauth Azure pluginを利用させていただきました。
READMEの通り、Redmineのボリュームのプラグインフォルダに移動してgit cloneします。
% cd redmine/plugins
% git clone https://github.com/Gucin/redmine_omniauth_azure.git
その後、Redmineのコンテナを再起動するだけでインストールされると思います。
便利ですねー。
ここで一旦Azure側の設定に移ります。
AzureポータルからAzureADを開いてアプリの登録を選択し、「+新規登録」を選択します。
名前は適当で、リダイレクトURIはひとまず
「https://localhost:10083/oauth2callback_azure」としておいてください。
この画面だとhttpsにしないと進めないのであとで書き換えます。
作成するとこんな感じです。
黒で塗り潰してますが、クライアントIDとテナントIDは後で使います。
ブランドでホームページURLに「http://localhost:10083/login」としておいてください。
証明書とシークレットでクライアントシークレットを作成します。
作成されたクライアントシークレットは後で使うのでメモっといてください。
APIのアクセス許可で管理者の同意を与えます。
これをやっておけば以下の画面で承諾する必要がなくなる?と思います。
マニフェストでreplyUrlsWithTypeにあるhttpsからsを外します。
本番で使うならhttpsにしてくださいね。
次にこの登録したアプリに対してアクセス権を付与します。
AzureADのエンタープライズアプリケーションを開くと作成したRedmineがあると思います。
それを開くとユーザーが追加できるようになっているので、AzureADユーザーを追加します。
ここでは適当にuserというユーザを作成しました。
ここで割り当てたユーザーだけが認証できるようになるはず。
そうすると追加したAzureADユーザーのアクセスパネルに、
登録したRedmineのアイコンが表示されると思います。
これ便利ですよね。
グループ単位でアクセス権与えようとすると金かかるのが残念。
アイコンをクリックするとRedmineのログイン画面が表示されると思います。
ここで、Redmine側の設定に戻ります。
管理者アカウントでログインして、Redmine Omniauth Azure pluginの設定画面を開きます。
Azureでアプリ登録時に生成された、クライアントIDとテナントIDとクライアントシークレットをコピペして、
Oauth authenticationにチェックを入れて、適用をクリックします。
ログアウトするとRedmineのログイン画面に「Login via Azure」というボタンが表示されますので、
クリックします。
この手順で進めているなら、アクセスパネルにAzureADユーザー(user)でログイン済みのはずなので、
以下のスクリーンショットのようになると思います。
認証が通ったのでRedmine側にユーザーが作られた状態です。
管理者アカウントで作成されたユーザーを有効にしてください。
ログオフして、再度「Login via Azure」をクリックするとuserでログインできると思います。
これで、AzureADでログイン認証していれば、
いちいちRedmineにログインするときにIDとパスワードを入力する手間が省けます。
これが無料でできるのは素晴らしいですね。
2021/7/25 更新
ログインID日本語問題
以下のようにAzureADアカウントでユーザーを初回登録する際、
「ログインIDは不正な値です」と出てしまいます。
日本語なのが原因なのですが、前からこうでしたっけ?
ひとまず応急処置として
redmine_oauth_controller.rb
を書き換えて
メールアドレスの@より前のユーザ名にします。
|
|
Redmineを再起動すれば反映されると思います。
良さそうです。
ログインフォームを非表示にする
せっかくAzureADアカウントでログインできるようにしても、
以下の通りログインフォームは表示されちゃうんですよね。
そこで
Redmine view customize plugin
で非表示にします。
以下の画像の通り設定してみてください。
非表示にしているだけなのでセキュリティ的には変わりませんが、
ログインIDとパスワードがわからない!っていう問い合わせは減らせそうですね。