Windows Active Directory/LDAP, SSO による認証

最終更新日: 2021年12月9日
R8 | R9

概要

Wagby は標準では (Wagby内部で管理している) アカウントとパスワードを用いたログオン認証を行います。ここで説明する方法を使うと、パスワード認証処理に Windows Active Directory / LDAP 認証, OpenID Connect, シングルサインオンを用いることができます。

認証方式の設定

「環境 > サーバ > 認証」を設定します。

図1 認証に関する設定

LDAP

認証方式に "LDAP" を指定します。次の設定欄が有効になります。

設定欄 説明 記述例
LDAPサーバのURL LDAPサーバのURLを指定します。 ldap://ldap.jasminesoft.co.jp/
ユーザ情報のDN ユーザ情報が登録されているディレクトリのパスを指定します。ユーザ名は「{0}」の部分に置き換わります。 cn={0}
ユーザ情報の検索開始エントリ ユーザ情報の検索開始エントリを必要に応じて設定します。 dc=jasminesoft,dc=co,dc=jp
LDAP接続用ユーザ LDAP 接続ユーザを指定します。匿名アクセスを許可している場合は設定不要です。
LDAP接続用パスワード LDAP 接続ユーザのパスワードを指定します。匿名アクセスを許可している場合は設定不要です。
LDAP認証と juser の認証を併用する LDAP認証 と juser テーブルを用いた認証 (以下、JDBC認証と呼びます) を併用することができます。LDAP, JDBC いずれかのパスワードに合致すればログインできます。(*1) 併用は行うが、特別なアカウント(admin など管理者系)のみ JDBC 認証を行いたい場合は、JDBC 認証を行いたくないアカウントの juser テーブルの passwd カラムを NULL とすることで JDBC 認証ではログオンできなくなります。
1. そのためjuserテーブルに簡易なパスワードを設定しないように注意する必要があります。

Active Directory

認証方式に "ActiveDirectory" を指定します。次の設定欄が有効になります。

設定欄 説明 記述例
ActiveDirectoryサーバのURL ActiveDirectoryサーバのURLを指定します。 ldap://adserver.jasminesoft.co.jp/
ActiveDirectoryドメイン ActiveDirectoryのドメインを指定します。 jasminesoft.co.jp
ユーザ検索フィルタ ActiveDirectoryのユーザ検索フィルタを指定します。通常、このフィルタを指定する必要はありません。未設定時は "(&(objectClass=user)(userPrincipalName={0}))" が利用されます。 (&(objectClass=user)(sAMAccountName=XXXXX))

外部認証

認証方式に "外部認証(HttpServletRequest#getRemoteUser()を利用)" を指定します。 詳細はシングルサインオンの節で説明します。

アカウントとパスワードの設定

Windows Active Directory / LDAP に登録済みの「アカウント」と同じものをアカウントモデル(juser テーブル)の "userid" 項目に登録してください。なお juser テーブルの「パスワード」はダミーの値を設定してください。それ以外の juser テーブルの項目は任意に設定してください。[参考:juserの関連テーブル...]

実際の認証処理では、この (juserテーブルの) パスワードは使われなくなります。

アカウントの同期についての考え方

Windows Active Directory / LDAP 上のアカウントとの「自動同期」には対応していません。

一般的な運用は Windows Active Directory / LDAP をマスタとします。マスタに加わった変更情報を何らかの方法で抽出し、Wagby の juser テーブルへ反映させるようにします。

具体的には Wagby の REST API を呼び出す形の密結合的な同期から、差分情報を CSV 形式ファイルでまとめて、夜間にアップロード更新処理を行って同期するという方法などがあります。

仕様・制約

  • LDAP と ActiveDirectory の併用を行うことはできません。
  • ActiveDirectory と JDBC認証(juserテーブル利用)の併用を行うことはできません。

技術情報 設定ファイルの詳細

Wagby Designer の設定は application.properties に反映されます。

LDAP 用設定

wagby.security.ldap.url=${LDAPサーバのURL}
wagby.security.ldap.userSearchFilter=${ユーザ情報のDN}
wagby.security.ldap.userSearchBase=${ユーザ情報の検索開始エントリ}
wagby.security.ldap.managerDn=${LDAP接続用ユーザ}
wagby.security.ldap.managerPassword=${LDAP接続用ユーザのパスワード}

LDAP 認証とJDBC認証(juserテーブル利用)を併用する場合

wagby.security.useJdbcAuthentication=true

ActiveDirectory 用設定

wagby.security.activeDirectory.url=${ActiveDirectoryサーバのURL}
wagby.security.activeDirectory.domain=${ActiveDirectoryドメイン}

Spring Security について

Windows Active Directory / LDAP 認証は、Wagby に同梱されている Spring Security という認証・認可のためのオープンソース製品を用いて実現しています。開発者は Spring Security の仕組みを活かした認証処理のカスタマイズを行うこともできます。[技術資料の詳細...]

旧バージョンからの移行

R6/R7 から移行する場合は "R7リポジトリからR8リポジトリへの移行 > CASからSpringSecurityへの移行" をお読みください。

シングルサインオン

シングルサインオンとは、一回の認証(ログオン)で複数のアプリケーションを利用できるようにする仕組みです。シングルサインオンの実現には「認証サーバ」を用意する必要があります。認証サーバを経由することで、Windows Active Directory / LDAP といった認証方式以外にも、多くの認証に対応することができます。

Wagby は「認証サーバ」を同梱していません。すでに組織内で運用中、または新規に導入予定の認証サーバと Wagby を連携させることになります。

外部認証

認証方式に"外部認証(HttpServletRequest#getRemoteUser()を利用)" を指定することができます。

この設定を有効にすると、標準で同梱されているアカウント(juser)による認証は行われなくなり、request.getRemoteUser() から取得したユーザー名でWagbyのログオン処理が行われるようになります。この時、パスワードは不要です。

request.getRemoteUser() からユーザー名が取得できない場合、または取得したユーザーが juser に存在しない場合はログオンできません。
クライアントのWindows認証情報(REMOTE_USER)を使いたいという場合、この設定を有効にし、かつ、独自の Servlet Filter を用意して Wagby が利用している認証用ミドルウェア Spring Security にこれを登録する必要があります。[技術情報...]
IIS や Apache などの Web サーバー側で REMOTE_USER を利用できるように設定している場合は独自 Servlet Filter は不要という場合もあります。詳細は認証処理に詳しいエンジニアにご確認ください。

トラブルシューティング

ログの取得

想定どおりに動作しない場合、次の手順で詳細なログを取得することができます。

  1. ログレベルの変更

    wagbyapp/webapps/$(APPNAME)/WEB-INF/classes/log4j2.xml の末尾に以下のログ出力設定を追加して下さい。

    <Logger name="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider" level="DEBUG">
      <AppenderRef ref="C"/>
      <AppenderRef ref="F"/>
    </Logger>
    <Logger name="org.springframework.security.ldap.SpringSecurityLdapTemplate" level="DEBUG">
      <AppenderRef ref="C"/>
      <AppenderRef ref="F"/>
    </Logger>

    または次のようにすると、すべてのLDAP関連のログを出力します。

    <Logger name="org.springframework.security.ldap" level="DEBUG">
      <AppenderRef ref="C"/>
      <AppenderRef ref="F"/>
    </Logger>
  2. log4j2.xml 変更後、Wagby アプリケーションを再起動します。
  3. 下記のケースでログオンを行い、結果のログを確認してください。
    • LDAPに登録してあるID/パスワードを入力した場合。
    • 誤ったパスワードを入力した場合。
    • LDAPに登録していないIDを入力した場合。

エラーメッセージ

メッセージ 説明
Active Directory authentication failed: Supplied password was invalid パスワードが誤っています。
Active Directory authentication failed: User was not found in directory ADにユーザーが存在しません。

サポートポリシー

  • 外部の認証サーバを利用した設定に関する問い合わせ(接続できない、どう設定するか、など)は Premium Support となります。認証サーバ、お客様環境、Wagbyアプリ、それぞれの環境に依存するためです。
  • サポートはお客様の「認証サービス運用担当者」とやりとりします。これは認証サーバ製品に関する知識を有することが前提です。認証サービスの運用は、お客様環境の運用ポリシー、セキュリティポリシーと関わるためです。
  • 本ページに記載の内容は、接続のための最低限の事柄を記載したものです。さらに追加設定が必要な環境もあるかも知れません。あらかじめご了承ください。