使用Active Directory进行Symfony用户身份验证

时间:2010-03-01 14:15:00

标签: php windows symfony1 active-directory apache2.2

有没有办法在使用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登录时使用的凭据?

谢谢, 拉杜。

2 个答案:

答案 0 :(得分:1)

您可以尝试bhLDAPAuthPlugin吗?

答案 1 :(得分:1)

您可以通过编写自己的sfDoctrineGuardPlugin可调用身份验证来实现这一目标(如果您使用的是Doctrine)。我在这里引用插件'README

  

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

     

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

all:
  sf_guard_plugin:
    check_password_callable: [MyLDAPClass, checkPassword]
     

当symfony打电话给   $this->getUser()->checkPassword()   方法,它会调用你的方法或   功能。你的功能必须2   参数,第一个是   用户名和第二个是   密码。它必须返回true或   假。这是一个这样的模板   功能:

function checkLDAPPassword($username, $password)
{
  $user = LDAP::getUser($username);
  if ($user->checkPassword($password))
  {
    return true;
  }
  else
  {
    return false;
  }
}