无缝SSO与Kerberos,IE浏览器,Firefox,LDAP活动目录

Alias /students /var/www/students <Location /students> KrbServiceName HTTP KrbMethodNegotiate On KrbMethodK5Passwd On KrbSaveCredentials off KrbAuthRealms DOMAIN.LOCAL Krb5KeyTab /etc/httpd/keytab KrbAuthoritative off AuthType Kerberos AuthName "Please Login" AuthBasicProvider ldap AuthzLDAPAuthoritative on AuthLDAPURL "ldap://dc.domain.local:389/OU=Domain Users,DC=domain,DC=local?userPrincipalName?sub?(objectClass=*)" AuthLDAPBindDN "CN=ldapsearchuser,CN=Users,DC=domain,DC=local" AuthLDAPBindPassword ldapsearchuserpass require ldap-group CN=Students,CN=Users,DC=domain,DC=local require ldap-group CN=Staff,CN=Users,DC=domain,DC=local </Location> 

这允许所有属于学生/职员AD组的成员的用户访问http:// intranetsite / students后面的页面,而不必指定login凭证,只要他们的IE / Firefoxconfiguration正确。

使用userPrincipalName而不是sAMAccountName,因为kerberos模块正在将用户名@ REALM传递给ldap模块。

现在我遇到了这样的问题,如果有人没有被授权,他们会得到:

需要授权此服务器无法validation您是否有权访问请求的文档。 要么提供了错误的凭据(例如错误的密码),要么您的浏览器不知道如何提供所需的凭据。

有谁知道如何让它popup一个用户名/密码对话框,以便他们可以尝试备用凭据? 获得授权失败后,我可以要求凭据的唯一方法是清除我的caching。 如果我以身份validation的用户身份login到PC,但是没有获得此资源的授权,我无法提供备用凭据(这可能是件好事)。

我们面临一个非常类似的问题。 我们最终得出结论,尽pipe在Internet Explorer和Firefox中集成的NTLMlogin支持很方便,但是有太多导致失败的exception情况会改变我们的方法。

集成身份validation的问题在于,只有在当前login的用户名和密码仍然正确且正确授权才能访问资源的情况下,它才能正常工作。

有更多的情况下,它不工作,但是:

  • 如果用户名和/或密码不正确,则无法如上所述使用备用凭据
  • 如果帐号和/或密码已过期或者密码错误,浏览器将返回一个“未经授权”的信息,但不知道它是哪个问题

我们标准化的方法是build立一个接受凭证的用户名/密码login网页(在应用程序前面)。 提交证书时,应用程序将依次validation这些证书,然后相应地作出响应(在.NET环境中,您可以使用Forms Authentication http://msdn.microsoft.com/zh-cn/library/aa480476&#x3002; aspx强制通过此login页面访问应用程序)。 由于应用程序正在进行凭证validation,因此您可以获得有关login失败的丰富信息。 另外,即使login成功,但有相关信息显示给用户,例如他们的密码将很快失效等,这就提供了一个机会。

更新:我忘了提及,如果你采用这种方法,你将需要允许匿名访问IIS应用程序的根。 这将允许访问login网页,而无需首先尝试自动NTLM身份validation。 是否启用NTLM身份validation取决于您。 也许你确实想让一些客户端仍然自动login。