gpt4 book ai didi

php - CakePHP 3 Ldap 身份验证问题和说明

转载 作者:行者123 更新时间:2023-12-04 00:23:56 24 4
gpt4 key购买 nike

我正在努力将 LDAP 身份验证集成到我的项目中。我遵循了官方 CakePHP 网站的教程,指导如何在应用程序 src 路径中创建自定义对象并在 AuthController 中使用这些自定义对象。

所以我在 src 中创建了一个名为 Auth 的文件夹,文件名为 LdapAuthorize.php。路径看起来像这样 src/Auth/LdapAuthorize.php

这是我的 LdapAuthorize.php 代码:

namespace App\Auth;

use Cake\Auth\BaseAuthorize;
use Cake\Network\Request;

class LdapAuthorize extends BaseAuthorize {
public function authorize($user, Request $request) {
if ($user == 'username') { // where username is logged on ldap user on a computer.
return true;
}
}
}

我还在 AppController.php 文件中调用了该对象。这是我的代码:

public function initialize()
{
parent::initialize();
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'loginRedirect' => [
'controller' => 'Customers',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'display',
'home'
]
]);
$this->Auth->config('authenticate', [
'Ldap'
]);
}

所以当我访问 url http://localhost/AppPath/Dashboard/index 时我得到 Authentication adapter "Ldap"was not found.

由于这是我第一次使用 CakePHP,所以我在网上找不到那么多有助于解决任何问题的解决方案。

为 LdapAuthenticate.php 添加额外的代码:

namespace App\Auth;

use Cake\Auth\BaseAuthenticate;
use Cake\Network\Request;
use Cake\Network\Response;

class OpenidAuthenticate extends BaseAuthenticate
{
public function authenticate(Request $request, Response $response)
{
$users = ["john", "ray"];
return $users;
}
}

最佳答案

您需要的是 custom authentication adapter , 你的 LdapAuthorize 是 custom authorize adapter :

// in src/Auth/LdapAuthenticate.php

namespace App\Auth;

use Cake\Auth\BaseAuthenticate;
use Cake\Network\Request;
use Cake\Network\Response;

class LdapAuthenticate extends BaseAuthenticate {

protected $_host = 'your_ldap_server' ;

public function authenticate(Request $request, Response $response) {
$username = $request->data['username'] ;
$password = $request->data['password'] ;
$ds = @ldap_connect($this->_host) ;
if (!$ds) {
throw \Cake\Error\FatalErrorException ('Unable to connect to LDAP host.') ;
}
$basedn = "your ldap query... "
$dn = "uid=$username, ".$basedn;
$ldapbind = @ldap_bind($ds, $dn, $password);
if (!$ldapbind) {
return false ;
}
// Do whatever you want with your LDAP connection...
$entry = ldap_first_entry ($ldapbind) ;
$attrs = ldap_get_attributes ($ldapbind, $entry) ;
$user = [] ;
// Loop
for ($i = 0 ; $i < $attrs["count"] ; $i++) {
$user[$attrs[$i]] = ldap_values ($ldapbind, $entry, $attrs[$i])[0] ;
}
// Then close it and return the authenticated user
ldap_unbind ($ldapbind) ;
ldap_close ($ldapbind);
return $user ;
}

}

关于php - CakePHP 3 Ldap 身份验证问题和说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com