Wednesday, March 6, 2013

AlfrescoをActive Directoryと連携させてみた

こんにちは。おおたにです。

今回はAlfrescoをActive Directory(以下AD)と連携させてみようと思います。一言で連携と言っても、単純な認証の委譲なのか、SSOなのかとかありますが、今回はAlfrescoログイン時の認証をADに行ってもらう&ユーザ・グループ情報を同期するという一番簡単なパターンについて見ていきます。


初めに


この記事の前提条件は以下の通りです。
  • Alfrescoがインストールされている(本記事では現時点での最新版であるAlfresco 4.2.cを使っています)
  • ADがセットアップされている(Windows Server 2008 R2を使ってます)
Alfrescoがインストールされていない場合は「Alfresco4.0をインストールしてみよう(インストーラ編)」や「Alfresco4.0をインストールしてみよう(手動インストール編)」を参考にインストールしてみてください。ADについては…頑張ってください!

なお、ADにはLDAPアクセスする必要があるため、ファイアウォールでは標準的なLDAP用ポートである389番を通すように設定しておいてください。


AlfrescoにAD連携用の設定を行う


基本は以前の記事「AlfrescoのLDAP連携」とほぼ同じで、設定項目がちょろっと違う程度だと思ってください。

まずは、ユーザやグループのBaseDNを調べるべく、適当なLDAPクライアントを使ってADにアクセスしてみます。筆者はよくApache Directory Studio(のEclipseプラグイン)を使っています。インストール方法等はこちらにまとめられています。インストールしたら、早速ADにアクセスしてみます。以下のスナップショットのように新規接続を作成してアクセスし、同期対象のユーザ/グループのBaseDNを調べます。







すると、ユーザのBaseDNはOU=User Accounts,DC=aegif,DC=localで、グループのBaseDNはOU=User Groups,DC=aegif,DC=localであることが分かります。ちなみにこの例ではADサーバのIPが192.168.0.70、ドメイン名がaegif.local、ADアクセス用のユーザアカウントはAdministratorとなっています(実運用上は、ADの情報を取得する権限を委譲した個別のユーザアカウントを用意した方がよいかと思います)。

以上で設定に必要な情報がそろったので、Alfrescoにこれらの設定を反映させます。いじるファイルは <tomcat_dir>/shared/classes/alfresco-global.properties です。このファイルが無い場合は、alfresco-global.properties.sample というファイルがあるはずなのでこれをリネームして利用します。

# How to map the user id entered by the user to taht passed through to LDAP
# In Active Directory, this can either be the user principal name (UPN) or DN.
# UPNs are in the form <samaccountname>@domain and are held in the userPrincipalName attribute of a user
ldap.authentication.userNameFormat=%s@aegif.local

# The URL to connect to the LDAP server 
ldap.authentication.java.naming.provider.url=ldap://192.168.0.70:389

# The default principal to bind with (only used for LDAP sync). This should be a UPN or DN
ldap.synchronization.java.naming.security.principal=Administrator@aegif.local

# The password for the default principal (only used for LDAP sync)
ldap.synchronization.java.naming.security.credentials=p@ssw0rd

# The group search base restricts the LDAP group query to a sub section of tree on the LDAP server.
ldap.synchronization.groupSearchBase=ou\=User Groups,dc\=aegif,dc\=local

# The user search base restricts the LDAP user query to a sub section of tree on the LDAP server.
ldap.synchronization.userSearchBase=ou\=User Accounts,dc\=aegif,dc\=local


# authentication chain
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap-ad1:ldap-ad

以上で設定完了です。"ldap"から始まるプロパティがAD連携に関する設定で、"authentication.chain"は、Alfrescoログイン時の認証システムとして何を利用するかを指定するものです。複数指定し、認証処理をチェイニングすることが可能で、この例では通常のAlfrescoの認証とAD認証の両方を利用できるように設定されます。
"ldap-ad1:ldap-ad"はある種のおまじないで、Alfrescoの認証システム等で使われるSubsystemという仕組みにおけるAD連携モジュールのIDだと思ってください(このおまじないによって呼び出されるbeanの定義ファイルは <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/ldap-ad/ldap-ad-authentication-context.xml ですので、興味があったら見てみてください)。


できたかな?


あとはAlfrescoを起動し、実際に動作確認してみるだけです。Alfresco起動時にユーザ/グループ情報の同期処理が走るので、起動後にログをチェックしてみてエラーが出力されていないかを確認してみてください。 また、実際にADのユーザでログインしてみて、正常にログインできることも確認してくださいね(当たり前!)。他方、adminユーザでログインし、ユーザ/グループ情報が同期されていることも確認しましょう。

今回はここまでになります。この先にはSSO等がひかえていると思いますが、それはそれで大きなトピックですのでまたの機会にしたいと思います。

No comments: