2

我正在编写一个 Web 前端来管理我们公司的 OpenLDAP 服务器。我正在使用 Perl、Apache2、OpenLDAP、Cyrus SASL。

问题是,在使用 Web 界面时,我无法以 Kerberos 验证用户身份向 OpenLDAP 进行身份验证,因为我的 Kerberos 凭据未转发,并且 Apache 错误日志显示:

Credentials cache file '/tmp/krb5cc_33' not found

其中“33”是 Apache 的 uidNumber。这是有道理的,但不能解决问题。具有讽刺意味的是,这一切都在领域外工作,因为 mod_auth_kerb 要求用户名和密码,进行身份验证,缓存票证,然后一切正常。

我正在使用 mod_auth_kerb 对 Apache2 进行身份验证,它工作正常:不提示密码,向经过身份验证的用户显示受保护的页面(否则被拒绝)。配置的相关片段:

<Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all 
            AuthType Kerberos
            AuthName "Kerberos Login"
            KrbAuthRealms EXAMPLE.COM
            Krb5Keytab /etc/apache2/HTTP.keytab
            KrbServiceName HTTP
            KrbSaveCredentials on
            require valid-user
    </Directory>

Kerberos/GSSAPI/SASL 身份验证也可以正常工作,因此从命令行运行时,此代码可以正常运行:

1 #!perl
  2 use strict;
  3 use warnings;
  4 use Net::LDAP;
  5 use Authen::SASL;
  6 
  7 my $l = Net::LDAP->new( 'ldap.example.com', onerror=>'die', );
  8 my $sasl = Authen::SASL->new(mechanism=>'GSSAPI');
  9 $l->bind( sasl=>$sasl );
 10 
 11 print "OK\n";

那么,可能的解决方案是什么?

4

1 回答 1

0

默认情况下,Web 浏览器不转发 Kerberos 票证。(谢天谢地!这将是一个巨大的安全问题,因为浏览器只会将您的门票分发给您当地领域中任何需要门票的网站。)

不幸的是,让浏览器这样做需要一些努力。例如,在 Firefox 中,您必须进入 about:config 并自定义 network.negotiate-auth.delegation-uris 以添加您愿意委托票证的 URL。(我认为在 IE 中有类似的程序将网站标记为受信任域的一部分。)

除非您对浏览器环境有很多控制权,否则这通常是一条死胡同。大多数人只是让 Web 应用程序以自身身份(而不是用户身份)进行身份验证,并为其提供一般读取访问权限。或者,您可以使用支持凭证委托的更全面的站点范围的 Web 身份验证系统,但这对于您的情况来说可能是多余的。

支持这一点的两个实现是:

这两者都是需要设置一些基础设施的客户端/服务器企业 Web 身份验证系统。

于 2013-03-17T09:58:10.233 回答