CakePHP 2 で ActiveDirectory に LDAP 認証する

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

CakePHP 2 で ActiveDirectory に LDAP 認証してみました。Auth コンポーネントはカスタムの認証ロジックを簡単に組み込めるようになっています。 CakePHP のバージョンは 2.3.2 です。

認証 — CakePHP Cookbook v2.x documentation認証 — CakePHP Cookbook v2.x documentation

公式の Auth コンポーネントを使用したユーザー認証方法です。カスタムの認証方法についても紹介されています。

スポンサーリンク

コントローラーの作成

まず、 app\Controller\UsersController.php を作成し、下記のように記述します。 13 行目以外は通常の Auth コンポーネントを使ったものと同じです。

ビューの作成

同じくビューも作成しておきます。これも通常の Auth コンポーネントを使うときと違いはありません。とりあえず app\View\Userslogin.ctplogout.ctp を作成しておけば充分でしょう。

カスタムコンポーネントの作成

次に本題の LDAP 認証を行なうコンポーネントを作成します。 app\Controller\Component\Auth\LdapAuthenticate.php を作成し、下記のように記述します。

authenticate メソッドの $request にユーザーが入力したアカウントが入ってきますので、これを使って ActiveDirectory に問い合わせます。

_ldapAuth メソッドは勝手に定義したものなので名前はなんでもかまいません。この中で認証を行ない、失敗すれば false 、成功すれば LDAP で取得したユーザー情報を連想配列で返します。

ldap_connect の前の設定変数には、サーバーや認証に使う管理者の情報を設定しておきます。

変数名 説明 値の例
$LDAP_HOST LDAP サーバーのアドレス ldap://localhost
$LDAP_ADMIN_DN 管理者のアカウント cn=Administrator,cn=Users,
dc=test,dc=co,dc=jp
$LDAP_ADMIN_PASSWORD 管理者のパスワード
$LDAP_SEARCH_OU 検索するOU(組織単位) ou=TestOU,dc=test,
dc=co,dc=jp

基本的な流れは次の通りです。

  1. ldap_connect でサーバーに接続
  2. ldap_bind 管理者権限でバインド(ログインみたいなもん)
  3. ldap_search でユーザー名を検索
  4. ldap_get_entries でユーザーエントリーを取得
  5. ldap_bind ユーザー名とパスワードでバインド

最後の ldap_bind が成功すればパスワードが OK ということなので、認証 OK にする。

ユーザーが属しているグループは memberof に格納されているので、 CN 部分を抜きだしてやればグループの一覧が取得できます。

最後までお読みいただきありがとうございました m(_ _)m

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存