2011-12-09 31 views
2

我是通过kerberos协议进行身份验证的新手,所以我尝试阅读很多howto,但似乎找不到任何与我的约束有关的细节。以下是我有:Kerberos SSO与Apache和Tomcat在JDK5下

  • Active Directory服务器上的用户进行身份验证登录到自己的工作站
  • 每个最终用户使用IE 7连接到我的网应用程序
  • 一个Apache服务器负载均衡
  • 一些Tomcat服务器充当Apache服务器的工作者。
  • 每个tomcat的
  • ,我有2雅加达的servlet运行时,用户只能在一个servlet的连接(进一步,我将其称为servlet作为如果只有一个)
  • 我雄猫需要JDK5下运行。不是jdk6或jdk4。这是jdk5时期。

现在我想要一个自动登录我的servlet。基本上我只需要我的servlet来检索客户的主体,然后我就可以管理其余的。 根据我的理解,我的客户有一张票,他要求KDC获取访问apache服务器的特殊票据,然后他试图连接到Apache服务器。基于他的密钥表,apache服务器然后解码认证数据并授予/拒绝对指定资源的访问。 我对不对?请通过此指导我,我已经阅读了4天的页面,仍然不知道哪种解决方案更合适。我尝试了Apache的mod_auth_kerberos,但是他没有抓住用户的票据,而是像基本认证那样提问。显然spgneo

感谢

回答

3

好吧,我得到这个工作:

  1. 安装Kerberos 5 + apache的2 + mod_auth_kerb所。
  2. 在AD,产生只有主密钥表,您将使用Apache的,我用HTTP/[email protected]
  3. 将这个密钥表文件Apache服务器上,使之可读仅 由您的Apache用户。
  4. 然后编辑这些指令你的apache的conf为你的安全 位置

的apache.conf

[…] 
ServerName apache.mydom.com:80 
[…] 
LoadModule auth_kerb_module modules/mod_auth_kerb.so 
[…] 
<LocationMatch /secure)> 
    [… some other stuff …] 
    Order allow,deny 
    Allow from all 
    AuthType Kerberos 
     AuthName "Authentification requise" 
     KrbAuthRealms MYDOM.COM 
     #this allows user to be saved in the request 
     KrbSaveCredentials on 
     #this one force Negotiate AuthType instead of basic fallback 
     KrbMethodNegotiate on 
     #this trim the realm from username saved in the request (request.getRemoteUser() will give you "user" instead of "[email protected]" 
     KrbLocalUserMapping on 
     KrbAuthoritative on 
     KrbVerifyKDC on 
     Krb5Keytab /install/binaries/httpd/apache.keytab 
     KrbServiceName HTTP 
    require valid-user 
</LocationMatch> 

而且有一件事我几乎没有发现在网络上,你有修改您的tomcat服务器配置(tomcat/conf/server.xml):

<Connector [... AJP connector configuration ...] request.tomcatAuthentication="false"/> 

这是真的很重要因为没有它你tomcat不会从tomcat auth检索任何信息。 不要忘记,DNS对于Kerberos安装真的非常重要。如果您有任何问题,请尝试检查您的所有服务器的DNS。

+1

伟大而深刻的答案! FTR:JDK5不支持SPNEGO。 –