BLOGTIMES
2016/03/10

PHP から Active Directory 認証を使う

  windowsserver  php  ldap 
このエントリーをはてなブックマークに追加

PHP から AD (Active Directory) を認証データベースとして使うスクリプトを作ってみました。
SSO 関連の実装となると、とにかく LDAP は避けて通れないですからね。

PHP で LDAP を使えるようにする

まず基本的な事項ですが、AD の実体は LDAP なので、PHP からは LDAP を使ってアクセスすることになります。PHP の LDAP サポートはデフォルトでは有効になっていないので、CentOS や RHEL の場合には yum でモジュールを追加したり、ソースからインストールしている場合は--with-ldap[=DIR] をつけてリコンパイルしてやる必要があります。

yum install php-ldap -y

Base DN を調べておく

サンプルを動作させるために必要になるので、AD サーバ上で Base DN (Distinguished Name) を調べておきます。
LDAP に馴染みがないとこれが何なのか分かりづらいかもしれませんが、ツリー状のデータ構造を持つ LDAP の検索の起点になるのが BaseDN です。

例えば AD が入っている Windows Server 上でコマンドプロンプトを開いて以下のようなコマンドを打つと hoge ユーザーの DN が表示できます。
(うまく行かない場合はユーザー名の部分を * にするとユーザーの一覧が表示できるはずです。)

C:\Windows\System32>dsquery user -upn hoge* "CN=hoge,CN=Users,DC=example,DC=local"

表示されている文字列はユーザーの DN なので Base DN としてはその末尾の部分 DC=example,DC=local を使います。
これはかなりシンプルな構成の AD の例ですが、構成等によっては OU= という部分が含まれていたりするはずです。

動作するサンプル

プログラムは「How to use LDAP Active Directory Authentication with PHP :: ExchangeCore」をベースに再利用しやすいようにちょいちょい書き換えてみました。

設定する必要があるのは以下の3項目。

$adServer = "ldap://###LDAP_SERVER_NAME_OR_IP###"; //ADサーバの名前 or IP $netbiosName = "###NETBIOS_DOMAIN###"; //ログインするドメインのNETBIOS名 $baseDn = '###BASE_DN###'; //Base DN(前述のとおり)



これだけなので、慣れてしまえば意外と簡単かもしれませんね。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/8335
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン