今回は Azure AD と GROWI で SAML 認証による SSO 連携を実現したいと思います。GROWI は高機能な Wiki ツールですが、通常の利用方法だと GROWI 内でアカウント管理する必要があります。Azure AD で SSO することによってユーザー管理の手間を省き、アクセス権を適切に与えることができます。
GROWI には HTTPS でアクセスできるようにしておく必要があります。GROWI の構築方法については以下記事をご覧ください。
SSO 構築手順
GROWI 側準備
GROWI に管理者アカウントでサインインし、管理項目の[セキュリティ設定]>[認証機構設定]>[SAML]にて、[SAML を有効にする]をオンにします。Azure AD 側に設定するため、下の[コールバック URL]の値をコピーしておきます。
[更新]はクリックしなくてもいいので、そのまま Azure AD の設定に移ります。
Azure AD 側設定
Azure ポータルにて、[Azure Active Directory]>[エンタープライズ アプリケーション]から新規アプリケーションの追加をします。[ギャラリー以外のアプリケーション]から、適当な名前をつけて作成します。
今回は「Growi-test」という名前で作成しました。作成が完了したら、メニューから[シングル サインオン]をクリックし、[SAML]を選んで設定を開始します。
[基本的な SAML 構成]の項目では、[応答 URL]に GROWI でコピーした「コールバック URL」の値をペーストします。また、連携先のアプリを識別する名前として任意の名前を[識別子(エンティティ ID)](①)のところに指定します。この名前はどこかに控えておいてください。
GROWI 側の設定で必要になるため、[(アプリ名)のセットアップ]項目では、[ログイン URL](②)の値をコピーして控えておきます。
[SAML 署名証明書]項目で、[証明書(Base64)]の証明書ファイル(③)をダウンロードしておきます。
[ユーザー属性とクレーム]項目で、[編集]ボタンをクリックします。クレーム名の URL をそれぞれどこかに控えておきます。
構成に必要な値の確認は以上です。あとはアクセスさせたいユーザーの割り当ても行っておきます。
GROWI 側設定
Azure AD 側での設定が完了したら、GROWI に戻り、[Basic Settings]で①②③の項目にそれぞれ控えていた値を入力します。③については、証明書ファイルをメモ帳などで開いて中身のテキストデータを入力します。
[Attribute Mapping]では、Azure AD のクレームの URL をそれぞれコピーします。クレーム名だけでなく、URL 全体を入力してください。
[Attribute-based Control]項目はそのままで、ページ下部の[更新]をクリックして設定を保存します。
動作確認
SAML を有効化すると、GROWI のサインインページに新しい項目が表示されます。[External Auth]をクリックし、[Sign in(by saml Account)]をクリックします。
すると Azure AD の認証ページに飛ぶので、Azure AD ユーザーでサインインします。構成がうまくいっていれば、GROWI に無事サインインできます。
管理ページでユーザーの一覧を確認すると、確かに Azure AD ユーザーの情報でユーザーが作成されていることが確認できます。
注意:パスワード認証以外での挙動について
どうやら Azure AD で認証する際、パスワード認証以外の方法で認証していると GROWI サインイン時にエラーが発生するようです。次の2つでエラーが発生することを確認しています。
- Windows 資格情報を用いたシームレスサインイン
- MS Authenticator アプリを用いたパスワードレスサインイン
原因は SAML 認証時に GROWI 側から RequestAuthnContext
の値でパスワード認証など認証方法を指定する値を渡しているためと思われます。Azure AD で認証する場合は、リクエスト時に必須のパラメーターの内容ではないため削除すればうまくいきそうですが、GROWI 側に設定項目がないので今のところは対処方法がなさそうです。
SAML 認証エラーの回避方法(2020/07/19 追記)
マイアプリポータル(https://myapplications.microsoft.com)から GROWI に設定したアイコンをクリックしてアクセスすると正常にサインインできました。Windows でパスワードレスのサインインを設定している場合はこの方法でサインインします。
コメント