java - JDK5 下使用 Apache 和 Tomcat 的 Kerberos SSO

标签 java apache tomcat single-sign-on kerberos

我是通过 kerberos 协议(protocol)进行身份验证的新手,因此我尝试阅读大量有关它的方法,但似乎我找不到任何与我的限制相关的细节。这是我所拥有的:

  • 用户在其上进行身份验证以登录其工作站的 Active Directory 服务器
  • 每个最终用户都使用 IE 7 连接到我的 Intranet 应用程序
  • 具有负载平衡功能的 Apache 服务器
  • 一些 Tomcats 服务器充当 Apache 服务器的工作人员。
  • 在每个 tomcat 上,我运行 2 个 jakarta servlet,用户仅连接一个 servlet(此外,我将其称为 servlet,就好像只有一个一样)
  • 我的tomcat需要在jdk5下运行。不是jdk6或jdk4。现在是jdk5时期。

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

谢谢

最佳答案

好的,我成功了:

  1. 安装 Kerberos 5 + apache 2 + mod_auth_kerb。
  2. 在您的 AD 上,生成一个 key 表,其中仅包含您将用于 Apache 的主体,我使用 HTTP/[email protected]
  3. 将此 keytab 文件放在您的 apache 服务器上并使其只读 由您的 Apache 用户提供。
  4. 然后使用这些指令编辑您的 apacheconf 以确保您的安全 位置

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 "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1164627463515c48555e5c3f525e5c" rel="noreferrer noopener nofollow">[email protected]</a>"
        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。

关于java - JDK5 下使用 Apache 和 Tomcat 的 Kerberos SSO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448558/

相关文章:

linux - 服务器上每个域的邮件客户端配置

Spring inside war 无法在内部 jar 文件中找到类路径资源

jsp - 为什么在不重新启动 Tomcat 的情况下我的 JSP 更改没有反射(reflect)出来?

java - 使用 PostgreSQL 和 Tomcat 的单个应用程序/数据库服务器的安全性

apache - phpmyadmin 域名

java - 使用 sshj 的 SFTP 服务器上不受支持的 SETSTAT 请求的解决方法

apache - 从现有的 Ubuntu + 应用程序创建 Docker 镜像

java - @Post 在 Rest 服务中接受 Json 值

java - 如何像其他网站一样解决 YouTube API 嵌入限制?

java - 在插件 org.springframework.boot :spring-boot-maven-plugin:1. 1.4.RELEASE 中找不到目标 '' 可用目标重新打包