Java JDK5下Apache和Tomcat的Kerberos SSO

Java JDK5下Apache和Tomcat的Kerberos SSO,java,apache,tomcat,single-sign-on,kerberos,Java,Apache,Tomcat,Single Sign On,Kerberos,我是通过kerberos协议进行身份验证的新手,所以我尝试阅读了很多关于该协议的内容,但似乎找不到任何约束的细节。以下是我所拥有的: 一种Active Directory服务器,用户在其上通过身份验证登录到其工作站 每个最终用户都使用IE 7连接到我的intranet应用程序 具有负载平衡的Apache服务器 一些Tomcat服务器充当Apache服务器的工作服务器 在每个tomcat上,我有2个jakarta servlet在运行,用户只在一个servlet上连接(此外,我将把它称为serv

我是通过kerberos协议进行身份验证的新手,所以我尝试阅读了很多关于该协议的内容,但似乎找不到任何约束的细节。以下是我所拥有的:

  • 一种Active Directory服务器,用户在其上通过身份验证登录到其工作站
  • 每个最终用户都使用IE 7连接到我的intranet应用程序
  • 具有负载平衡的Apache服务器
  • 一些Tomcat服务器充当Apache服务器的工作服务器
  • 在每个tomcat上,我有2个jakarta servlet在运行,用户只在一个servlet上连接(此外,我将把它称为servlet,就好像只有一个servlet一样)
  • 我的雄猫需要在jdk5下运行。不是jdk6或jdk4。现在是jdk5时段
现在我想要一个自动登录到我的servlet上。基本上,我只需要我的servlet来检索客户机的主体,然后我就可以管理其余的。 根据我的理解,我的客户机有一张票据,他要求KDC提供访问apache服务器的特殊票据,然后他尝试连接到apache服务器。然后,apache服务器根据他的密钥表对身份验证数据进行解码,并授予/拒绝对指定资源的访问。 我说得对吗?请引导我完成这一点,我已经阅读了4天的网页,仍然没有关于哪个解决方案是更合适的线索。我尝试了Apache的mod_auth_kerberos,但他没有抓住用户的票证,而是像基本身份验证一样询问。显然是斯普格尼奥


谢谢

好的,我成功了:

  • 安装Kerberos 5+apache 2+mod_auth_kerb
  • 在您的广告上,生成一个键表,其中只包含您将用于Apache的主体,我使用HTTP/Apache.mydom。com@MYDOM.COM
  • 将此keytab文件放在apache服务器上,并使其仅可读 由您的Apache用户创建
  • 然后使用这些指令编辑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 "user@MYDOM.COM"
            KrbLocalUserMapping on
            KrbAuthoritative on
            KrbVerifyKDC on
            Krb5Keytab /install/binaries/httpd/apache.keytab
            KrbServiceName HTTP
        require valid-user
    </LocationMatch>
    
    […]
    ServerName apache.mydom.com:80
    […]
    LoadModule auth_kerb_module modules/mod_auth_kerb.so
    […]
    […其他一些东西…]
    命令允许,拒绝
    通融
    身份验证类型Kerberos
    AuthName“认证要求”
    KrbAuthRealms MYDOM.COM
    #这允许将用户保存在请求中
    KrbSaveCredentials on
    #这是一种强制类型,而不是基本的回退
    KrbMethodNegotiate on
    #这将从请求中保存的用户名(request.getRemoteUser()将为您提供“user”而不是user@MYDOM.COM"
    上的KrbLocalUserMapping
    Krbautoritative on
    KrbVerifyKDC on
    Krb5Keytab/install/binaries/httpd/apache.keytab
    KrbServiceName HTTP
    需要有效用户
    
    我在web上几乎找不到的一件事是,您必须修改tomcat服务器配置(tomcat/conf/server.xml):

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

    回答非常好!FTR:JDK5不支持SPNEGO。
    <Connector [... AJP connector configuration ...] request.tomcatAuthentication="false"/>