PHP中的Kerberos身份验证

PHP中的Kerberos身份验证,php,apache2,single-sign-on,kerberos,Php,Apache2,Single Sign On,Kerberos,让我们假设我对Kerberos知之甚少——只是一些基础知识 我有 Debian Linux 2.6 Web服务器 Apache2.2 改装认证路缘石/5.3 PHP/5.2 (工作)Kerberos领域 Windows客户端 火狐3 “已登录的身份”user@EXAMPLE.COM“在MIT网络身份管理器中 我如何在PHP脚本中使用这些信息,以便在访问者拥有类似的kerberos票证时不需要登录网站?我不想让Apache处理身份验证。我需要找出哪个用户是通过PHP访问该网站 可能

让我们假设我对Kerberos知之甚少——只是一些基础知识

我有

  • Debian Linux 2.6 Web服务器
    • Apache2.2
      • 改装认证路缘石/5.3
      • PHP/5.2
  • (工作)Kerberos领域
  • Windows客户端
    • 火狐3
    • “已登录的身份”user@EXAMPLE.COM“在MIT网络身份管理器中
我如何在PHP脚本中使用这些信息,以便在访问者拥有类似的kerberos票证时不需要登录网站?我不想让Apache处理身份验证。我需要找出哪个用户是通过PHP访问该网站

可能吗?如果是:如何

到目前为止我发现的是:我必须这样做


不过就是这样…

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

 $_SERVER['REMOTE_USER']
 $_SERVER['KRB5CCNAME']
看来他们已经成功了


这样,如果您可以看到用户是什么,那么php实际上并不需要进行身份验证。

mod_auth_kerb将为您处理实际的身份验证。之后,它将设置远程_USER和KRB5CCNAME环境变量。请注意,有几个注意事项:

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

对于您的案例,我建议您看看Tom McLaughlin的《如何使用Kerberos》一书:

使用Kerberos V administration server是否明智?是否有关于在PHP中使用Kerberos的文档和示例?到博客的链接已不存在。(现在返回404)看起来Tom停止了维护那个博客,它被回收了。您可以使用存档副本: