質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
LDAP

LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

3482閲覧

CakaPHP3のLDAP認証

yoshis22

総合スコア107

LDAP

LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2015/10/29 01:02

CakePHP3で開発をしています。
Auth機能を使ってLDAP認証をしたいと考えています。

認証はデータベースのパスワードを使わずに
Ldapのパスワードで認証をかけようとしています。

今の仕様だとパスワードの選択を外しても
必ずDBのテーブルでハッシュ化されたパスワード認証する仕様になっています。

そこで以下のsrc/Controller/AppControllerの編集と
src/Auth/LdapAuthenticate.phpを作成し、実装しました。

しかしながら、「Authentication adapter "Ldap" was not found. 」
というエラーになりLdap認証してくれません。

どうすればLDAPの認証ができるのか

特に知りたいのは以下の2点です。

  • - Ldapの情報を認証時にLDAPAuthentication.phpのauthenticateを反応させること
    • データベースでのパスワード認証をしないsrc/Controller/AppController.php

/src/Controller/AppController.php

php

1 2<?php 3namespace App\Controller; 4 5use Cake\Controller\Controller; 6use Cake\ORM\Query; 7 8class AppController extends Controller { 9 public function initialize() { 10 parent::initialize(); 11 12 $this->loadComponent('Flash'); 13 $this->loadComponent('Auth', [ 14 'authorize' => 'Controller', 15 'authenticate' => ['Ldap'], 16 'loginRedirect' => [ 17 'controller' => 'Users', 18 'action' => 'index' 19 ], 20 'logoutRedirect' => [ 21 'controller' => 'Users', 22 'action' => 'login' 23 ], 24 'authError' => __('現在はログイン状態ではありません。再度ログインをお試しください。') 25 ]); 26 27 $this->Auth->config('authorize', ['Ldap']); 28 $this->Auth->authenticate = array('Ldap'); 29 30 $this->Auth->allow(['view', 'display']); 31 } 32 33 public function isAuthorized($user) { 34 // Admin can access every action 35 if (isset($user['role_id']) && $user['role_id'] === 1) { 36 return true; 37 } 38 // Default deny 39 return false; 40 } 41} 42

src/Auth/LdapAuthorize.php

php

1 2<?php 3namespace App\Auth; 4 5use Cake\Auth\BaseAuthorize; 6use Cake\Network\Request; 7use Cake\Network\Response; 8use Cake\Error\FatalErrorException; 9 10class LdapAuthorize extends BaseAuthorize { 11 protected $_host = 'xxx.xxx.xxx.xxx'; 12 13 public function authenticate(Request $request, Response $response) { 14 $username = $request->data['username'] ; 15 $password = $request->data['password'] ; 16 17 $ds = ldap_connect($this->_host) ; 18 if (!$ds) { 19 throw FatalErrorException ('Unable to connect to LDAP host.') ; 20 } 21 $basedn = "your ldap query... "; 22 $dn = "uid=$username, ".$basedn; 23 $ldapbind = @ldap_bind($ds, $dn, $password); 24 if (!$ldapbind) { 25 return false ; 26 } 27 // Do whatever you want with your LDAP connection... 28 $entry = ldap_first_entry ($ldapbind) ; 29 $attrs = ldap_get_attributes ($ldapbind, $entry) ; 30 $user = [] ; 31 // Loop 32 for ($i = 0 ; $i < $attrs["count"] ; $i++) { 33 $user[$attrs[$i]] = ldap_values ($ldapbind, $entry, $attrs[$i])[0] ; 34 } 35 ldap_unbind ($ldapbind) ; 36 return $user ; 37 } 38 39 public function authorize($user, Request $request) { 40 if ($user['username'] == 'ad-auth') { // where username is logged on ldap user on a computer. 41 return true; 42 } 43 } 44} 45

ちなみにQueenCityCodeFactory\LDAPはcomposerで
インストールできなかったので不安定かなと思い
利用しないようにしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

この件は無くなったので
一旦完了します

投稿2015/10/30 00:31

yoshis22

総合スコア107

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問