【问题标题】:Kerberos Authentication in PHPPHP 中的 Kerberos 身份验证
【发布时间】:2010-09-28 04:46:40
【问题描述】:

假设我对 Kerberos 了解不多 - 只是基础知识。

我有……

  • Debian Linux 2.6 网络服务器
    • 阿帕奇 2.2
      • mod_auth_kerb/5.3
      • PHP/5.2
  • 一个(工作的)Kerberos 领域
  • Windows 客户端
    • 火狐3
    • 在 MIT Network Identity Manager 中的登录身份“user@EXAMPLE.COM”

如何在 PHP 脚本中使用此信息,以便在访问者拥有类似的 kerberos 票证时无需登录网站?我不希望 Apache 处理身份验证。我需要找出哪个用户正在通过 PHP 访问该站点。

这可能吗?如果是:如何?

到目前为止我发现了什么:我必须"enable" the domain in Firefox

不过就是这样……

【问题讨论】:

  • 使用 Kerberos V 管理服务器会不会很聪明?

标签: php apache2 single-sign-on kerberos


【解决方案1】:

我不确定这是否会有所帮助,但如果您使用 KrbSaveCredentials 参数,Apache 将使用 modauthkerb 包向 PHP 发送用户名信息。您应该在 php 中获得两个全局变量:

 $_SERVER['REMOTE_USER']
 $_SERVER['KRB5CCNAME']

http://archives.postgresql.org/pgsql-admin/2004-08/msg00144.php 看起来他们已经完成了这项工作。

这样如果你可以看到用户是什么,它真的不需要 php 实际进行身份验证。

【讨论】:

    【解决方案2】:

    mod_auth_kerb 将为您处理实际身份验证。之后,它将设置 REMOTE_USER 和 KRB5CCNAME 环境变量。请注意,有一些警告:

    • 如果启用了 Krb5AuthToLocal 选项,mod_auth_kerb 可以在 Kerberos 主体和本地用户名之间进行转换。
    • 如果启用了 Krb5AuthToLocal,当身份验证成功时,mod_auth_kerb 将调用 Kerberos 库来执行从经过身份验证的名称到本地名称的转换,因为 Kerberos 主体并不总是与操作系统中的实际用户相同(您可以将主体映射到用户名)。
    • 当使用 MIT Kerberos 时,此映射是在 /etc/krb5.conf 中的 auth_to_local 规则的帮助下执行的,有关详细信息,请参见 krb5.conf 手册页。
    • mod_auth_kerb 有一个错误,即生成的本地名称不应比主体本身的名称长。这对于来自默认领域的主体通常是正确的,因为它们没有领域部分,即“用户”而不是“用户@REALM”。但是,如果您有多个受信任的领域,则来自非默认领域的用户将显示为“user@ANOTHER.REALM”,然后 mod_auth_kerb 会崩溃。这个错误应该在 Fedora 18+ 和 RHEL6.5 中修复,不确定 Debian 因为 mod_auth_kerb 上游有点死。
    • 因此,您的 REMOTE_USER 变量将包含 Kerberos 主体或本地用户名,具体取决于 mod_auth_kerb 的配置方式。如果您的应用程序依赖 REMOTE_USER 值必须是真实的现有系统用户这一事实,则需要确保启用 Krb5AuthToLocal 选项并且此类用户在系统中可见(通过 winbind 或 sssd)。

    对于您的情况,我建议您查看 Tom McLaughlin 的优秀方法:http://blogs.freebsdish.org/tmclaugh/2010/07/15/mod_auth_kerb-ad-and-ldap-authorization/

    【讨论】:

    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2022-06-13
    • 1970-01-01
    • 2017-06-28
    • 2017-07-13
    相关资源
    最近更新 更多