- blogs:
- cles::blog

PHP から Active Directory 認証を使う



PHP から AD (Active Directory) を認証データベースとして使うスクリプトを作ってみました。
SSO 関連の実装となると、とにかく LDAP は避けて通れないですからね。
† PHP で LDAP を使えるようにする
まず基本的な事項ですが、AD の実体は LDAP なので、PHP からは LDAP を使ってアクセスすることになります。PHP の LDAP サポートはデフォルトでは有効になっていないので、CentOS や RHEL の場合には yum でモジュールを追加したり、ソースからインストールしている場合は--with-ldap[=DIR] をつけてリコンパイルしてやる必要があります。
† Base DN を調べておく
サンプルを動作させるために必要になるので、AD サーバ上で Base DN (Distinguished Name) を調べておきます。
LDAP に馴染みがないとこれが何なのか分かりづらいかもしれませんが、ツリー状のデータ構造を持つ LDAP の検索の起点になるのが BaseDN です。
例えば AD が入っている Windows Server 上でコマンドプロンプトを開いて以下のようなコマンドを打つと hoge ユーザーの DN が表示できます。
(うまく行かない場合はユーザー名の部分を * にするとユーザーの一覧が表示できるはずです。)
表示されている文字列はユーザーの DN なので Base DN としてはその末尾の部分 DC=example,DC=local を使います。
これはかなりシンプルな構成の AD の例ですが、構成等によっては OU= という部分が含まれていたりするはずです。
† 動作するサンプル
プログラムは「How to use LDAP Active Directory Authentication with PHP :: ExchangeCore」をベースに再利用しやすいようにちょいちょい書き換えてみました。
設定する必要があるのは以下の3項目。
これだけなので、慣れてしまえば意外と簡単かもしれませんね。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/8335
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . リモートデスクトップで Alt + PrtSc と同じことをするには(3332)
3 . RDP のプロトコルを TCP だけに変更する(2565)
4 . 「日次」は「にちじ」じゃない?(2385)
5 . リモートデスクトップで Ctrl + Alt + Del キーを送信するには(2293)