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とパスワードを入力する手間が省けます。
これが無料でできるのは素晴らしいですね。
けど、管理者以外は多要素認証にお金がかかっちゃうのが微妙ですよねー。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする