□OpenPNE AD連携
こんにちは。アイフラッグの社内システム担当SKです。
今回は私の方からSNS『OpenPNE』を導入後の社内Active Directory(以下、ADと記載します。)との連携について記述して行きたいと思います。
OpenPNE自体の導入については、本家の手順通りに行えば問題ありませんでしたので、本記事では記載致しません。
http://www.openpne.jp/pne-downloads/openpne3/のセットアップ手順を参照して下さい。
・はじめに
OpenPNEとは・・
株式会社手嶋屋が開発をされた、Apache2.0ライセンスを採用して公開されるオープンソースSNS運営用プログラムです。
OpenPNEを使用することで、SNSサイトを簡単に開設することが可能となります。
デフォルトの機能や設置にはプログラミングの知識は必要ありませんので、
コミュニティサイト等の立ち上げが非常に簡単なオープンソースです。
http://www.openpne.jp/
今回社内にて自社のSNSサイトを立ち上げ、ナレッジの全体共有を行うツールとして使用出来ないかという要望があり、実際に導入してデモを行うことになり環境構築を行いました。
そこで課題として上がって来たのがアカウント管理についてでした。
OpenPNEでは初期導入した際、システム上のアカウント登録となり、社員数が多い企業では管理が非常に不便です。
※管理者が招待メールで全ユーザを招待するという方法になり、メールアドレスでの登録になります。
そこで既存の社内ADと連携できればアカウント管理をADで一元管理出来るので、連携する方法がないかを調査しました。
・AD連携について
OpenPNEは3.0以降のバージョンからプラグインを導入する事で機能拡張を行うことができます。
開発元でもプラグイン開発にはかなり力を入れているようで色々な機能をプラグインにて提供しているようです。
今回のAD連携についても下記プラグインを使用する事で実現可能との情報があり、実際に導入してみました。
導入したプラグイン名はopAuthLDAPPluginになります。
https://github.com/tejimaya/opAuthLDAPPlugin
READMEを参照し必要項目に社内ADの情報を入力していきます。
プラグイン導入後管理画面にアクセス。
認証プラグイン設定からopAuthLDAPPlugin設定を選択
設定するのは社内ADの下記情報
設定後実際にログインしてみました。
社内ADのID/PWを入力すると問題なくADのID/PWでログイン出来ました!
しかし後々連携がうまくいっていない事に気がつきます・・・
その後プロフィール等の初期設定を行い、他の方のID/PWでログインして頂いたところ、
SKさんのプロフィールが表示されるんだけど・・・と報告を受けました。
試してみるとどのアカウントでログインしても1番最初に設定した私のプロフィールしか表示されない現象が起こりました。
うまくADのアカウントと紐付いていないのか。。。
調査を行った結果、認証時にユーザ登録されるテーブルのname:ldapレコード内の【value:】にはActiveDirectory側のユーザー名が入っている必要があるのですが空となっていました。
valueの値が空になっている為、アカウントが識別できずにどのユーザでログインしても同じプロフィールが表示されてしまうという現象が発生していた。
実際に調査してみると既存のPluginではOpenLDAPには対応していましたが、
AD連携には対応しておらず連携する為には改修が必要な事が分かりました。
改修したプログラムは下記2つのファイルです。
・/plugins/opAuthLDAPPlugin/lib/user/opAuthAdapterLDAP.class.php
・/plugins/opAuthLDAPPlugin/lib/validator/opAuthValidatorLDAP.class.php
□改修ポイント
・opAuthAdapterLDAP.class.php
問題点:$ldap->getEntry()が空の値を返してしまう。
今回はこちらに空の値が入ってきてしまう為、対象テーブルに値が入らないという現象が発生していました。
ADの場合には、Cusername@example.comで返ってくる値が「username@example.com」のようになり、
これは、Zend_Auth_Adapter_LDAPのオプション(accountDomainName)を設定したときのデフォルトになります。
このフォーマットではgetEntry()は取得できないため、以下のように取得しています。
□改修ポイント
・validator/opAuthValidatorLDAP.class.php
問題点:uidを取得できない
LDAPエントリに「uid」という項目が存在することを前提に作られていますが、標準のADではuidという項目が存在しない為、
代わりにgetBoundUser()で取得した値を利用しています。
※OpenLDAPを使用する場合はuidの項目のままで取得できる。
上記のように改修する事で無事AD連携を行う事が出来ました。
今回OpenPNEのAD連携について色々なサイトを調査したのですが、連携についてはほとんど情報が無かった為、今回こちらのブログへ記述させて頂きました。
開発元にもこの結果をフィードバックさせて頂いたのですが、現状公開されているソースだとAD連携することができませんので、
これからOpenPNEを導入してアカウントをAD連携で管理したい場合はこちらを参考にして頂ければ幸いです。
アイフラッグラボとは、アイフラッグが提供する技術情報サイトです。アイフラッグが提供するスモールビジネス向けのITサービスの開発実績から培った技術ノウハウを公開していきます。技術情報が皆さまのサポートになれば幸いです。