我正在撰写一个网络前端来管理我们公司的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";
那么,可能是什么解决方案?
答案 0 :(得分:0)
默认情况下,Web浏览器不转发Kerberos票证。 (谢天谢地!这将是一个巨大的安全问题,因为浏览器只会将您的门票分发到您当地领域的任何要求它们的网站。)
不幸的是,让浏览器这样做需要付出一些努力。例如,在Firefox中,您必须进入about:config并自定义network.negotiate-auth.delegation-uris以添加您愿意委派票证的URL。 (我认为在IE中有类似的程序将网站标记为可信域的一部分。)
除非您对浏览器环境有很多控制权,否则这通常是死路一条。大多数人只是将Web应用程序作为自身(而不是用户)进行身份验证,并为其提供一般读取访问权限。或者,您可以使用更全面的站点范围的Web身份验证系统来支持凭据委派,但这可能会因您的情况而过度。
支持此功能的两个实现是:
这两者都是客户端/服务器企业Web身份验证系统,需要设置一些基础架构。