【问题标题】:Symfony user authentication using Active Directory使用 Active Directory 的 Symfony 用户身份验证
【发布时间】:2011-01-22 07:38:30
【问题描述】:

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

谢谢, 拉杜。

【问题讨论】:

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


【解决方案1】:

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

用外部方法检查用户密码

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

all:
  sf_guard_plugin:
    check_password_callable: [MyLDAPClass, checkPassword]

当 symfony 调用 $this-&gt;getUser()-&gt;checkPassword() 方法,它将调用您的方法或 功能。您的函数必须占用 2 参数,第一个是 用户名,第二个是 密码。它必须返回 true 或 错误的。这是一个这样的模板 功能:

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

【讨论】:

  • 但是有没有办法使用用户在 Windows 登录时已经提供的凭据自动登录用户?
  • AFAIK,不,没有。对我来说唯一正确的方法是创建类似于sfGuardBasicSecurityFilter 的过滤器,一旦他注意到与 Windows 登录相关的请求标头,它将自动登录。
【解决方案2】:

你可以试试bhLDAPAuthPlugin 吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多