在网页上使用Kerberos进行SSO

时间:2014-03-07 06:54:33

标签: php linux kerberos

我在使用Kerberos时并不是很熟练。但我想用Kerberos实现单点登录。

我想要实现的目标是,您只需要使用Windows 7登录然后打开浏览器,就不需要其他验证,例如:对于内联网。这可能吗?

Kerberos正在使用门票。第一步是准备机票授予票,不是吗? Windows Server正在使用Kerberos进行身份验证。那么在Windows登录后是否有票证授予票证?我可以使用它(如果有的话)获取其他服务的服务票据吗?

另一个问题是关于apache:当我使用Kerberos和Linux服务器时,我需要一个名为mod_auth_kerb的mod,不是吗?如果这是安装在我的Linux服务器上,我可以使用Kerberos验证吗?如果linux服务器上有内联网,如何用kerberos进行身份验证呢?我应该在PHP代码中进行身份验证还是例如有可能“学习”apache以某种方式进行身份验证吗?

非常感谢您的帮助:)。

亲切的问候, WUZ

1 个答案:

答案 0 :(得分:5)

是的,这一切都是可能的,并且一直都在做。当您登录域帐户时,Windows使用您的密码从域控制器获取Kerberos凭据(票证授予票证或TGT),这反过来允许您获取其他服务的票证而无需重新输入密码。您可以使用klist.exe查看TGT以及针对特定服务的任何其他票证。 Web浏览器使用HTTP协商交换将票证发送到Web服务器,服务器可以使用该票证来识别您(可选的返回令牌也可以向客户端验证服务器)。服务器必须是同一个Kerberos领域的成员,或者是一个拥有领域信任链的服务器。

mod_auth_kerb是Apache中用于Kerberos身份验证的最常用模块。您可以使用setspn.exe将Web服务器的Kerberos主体添加到AD帐户,格式为HTTP / server-hostname。然后使用Windows上的ktpass.exe或Unix上的ktutil程序(需要AD帐户的密码)创建一个包含该主体密钥的文件,称为“keytab”。 mod_auth_kerb配置引用keytab。 mod_auth_kerb将环境变量REMOTE_USER设置为客户端的标识,您只需在应用程序中读取它(在本例中为PHP代码)。

您必须将Web浏览器配置为实际使用HTTP协商身份验证,其详细信息因浏览器而异。

这只是以高层次的方式回答你的直接问题;当然,还有很多其他细节,因为您正在处理整个基础架构和必须协调的几个部分:Kerberos,DNS名称,主体名称,浏览器配置,Apache等。

顺便说一句:英语中的单词是“authenticate”,而不是“authentificate。”