1

有没有办法使用 Active Directory 对 symfony 应用程序中的用户进行身份验证?你能指出一些文件吗?

编辑

我需要的是在我的应用程序中进行透明登录。用户在 Windows 登录时进行一次身份验证,然后应使用相同的凭据访问所有应用程序,而无需再次询问域\用户名和密码。

我在一个简单的 php 脚本中尝试了以下操作:

if (!isset($_SERVER['PHP_AUTH_USER'])) {
  header('WWW-Authenticate: Basic realm="my realm"');
  header('HTTP/1.0 401 Unauthorized');
  exit;
} else {
  echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
  echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}

但随后我弹出了身份验证表单。有没有办法将标头传递给 Windows 登录时使用的凭据?

谢谢,拉杜。

4

2 回答 2

1

你可以试试bhLDAPAuthPlugin吗?

于 2010-03-01T17:02:38.977 回答
1

您可以通过编写自己的可调用身份验证来做到这一点sfDoctrineGuardPlugin(如果您使用的是 Doctrine)。我将在这里引用插件的自述文件

使用外部方法检查用户密码

如果您不想将密码存储在数据库中,因为您已经有一个 LDAP 服务器、一个 .htaccess 文件,或者如果您将密码存储在另一个表中,您可以在以下位置提供您自己的checkPassword 可调用(静态方法或函数)app.yml

all:
  sf_guard_plugin:
    check_password_callable: [MyLDAPClass, checkPassword]

当 symfony 调用 $this->getUser()->checkPassword() 方法时,它会调用你的方法或函数。你的函数必须有两个参数,第一个是用户名,第二个是密码。它必须返回真或假。这是此类功能的模板:

function checkLDAPPassword($username, $password)
{
  $user = LDAP::getUser($username);
  if ($user->checkPassword($password))
  {
    return true;
  }
  else
  {
    return false;
  }
}
于 2010-03-01T18:06:43.000 回答