这取决于。在我的例子中,我有一个配置了mod_kerb 的 Apache 服务器,并通过 AJP 将 http 请求转发到 Tomcat。
在这种情况下,Tomcat AJP 连接器配置了tomcatAuthentication=false,我可以使用request.getRemoteUser() 从 JSP 和 Servlet 获取用户身份验证。
显然,用户字符串在@ 之后带有域信息,因此您必须考虑它。
如果您对我的解决方案感兴趣,我可以详细说明我的答案。
编辑
我编辑我的答案以提供有关配置 Tomcat 以使用 Kerberos 的更多信息。
配置 NTP
首先,在每个系统 AD 服务器、Apache 服务器和 Tomcat 服务器中配置 NTP 客户端是很常见的。如果没有日期和时间同步,出现clock skew too great 或postdating 问题是很常见的。
为服务器创建 AD 主体
您需要在 AD 中创建一个主体以用于服务器主体身份验证。有必要为此主体获取密钥表文件。对不起,我不能告诉你怎么做。
在 Apache 服务器上安装和配置 Kerberos
获得服务器主体和密钥表文件后,就可以配置 Apache 服务器了。将 kerberos 安装到该系统中并配置 /etc/krb5.conf。该文件的一个示例是:
HERE.YOUR.KERB.DOMAIN = {
kdc = your.dns.kerb.domain
admin_server = your.dns.kerb.domain
}
检查:
kinit -k -t keytab.file HTTP/principal.dns.name@HERE.YOUR.KERB.DOMAIN
klist
您的服务器配置正确。
安装和配置 mod_auth_kerb
安装mod_auth_kerb apache 模块并在每个location、directory、virtual host 或任何您需要的地方配置它的使用,见下文。此配置非常依赖于您的 kerberos 服务器,您将不得不使用一些参数,例如 KDC 验证、协商、是否具有权威性……
最重要的参数是Krb5Keytab,但是你可以查看this page来了解所有参数。这里有一个示例location:
<Location /sample/>
AuthType Kerberos
AuthName "auth-realm"
KrbMethodNegotiate on
KrbMethodK5Passwd off
Krb5Keytab /your/path/to/keytab.file
require valid-user
</Location>
当您尝试访问此位置 http://your.apache.server/sample 时,Apache 将尝试通过 kerberos 检查用户凭据。
AJP 配置
对于AJP配置(我之前已经回答过这个问题,但我在这里剪切并粘贴并适应这个问题)的过程如下:
- 为 AJP 安装 Apache 模块,通常称为
libapache2-mod-jk。 (在 debian/ubuntu 中你可以运行 sudo apt-get install libapache2-mod-jk)。
- 然后您将拥有一个名为
jk 或类似名称的新模块。您必须启用它(在 debian/ubuntu 中您可以运行 sudo a2enmod jk)。
- 默认配置将主要服务,打开它看看
JkWorkersFile指向哪里。需要此文件来配置管理与 tomcat 应用程序通信的workers。
- 创建工人文件(如果它不存在)。工作人员文件或多或少如下所示。
示例工人文件:
ps=/
worker.list=worker1,worker2,...
# worker1 definition
worker.worker1.port=8009
worker.worker1.host=host or ip
worker.worker1.type=ajp13
# worker2 definition
....
每个worker可以指向不同的tomcat服务器。端口必须与$CATALINA_HOME/conf/server.xml 中配置的端口相同。在这个文件中有一个 AJP 协议的连接器:
<Connector port="8009" protocol="AJP/1.3"
redirectPort="8443" tomcatAuthentication="false"/>
每个工人都必须指向这个端口。
最后,您可以使用JkMount workerName 配置您的位置(或其他),以指示 Apache 必须将此 URL 转发给正确的工作人员:
<Location /sample/>
JkMount worker1
AuthType Kerberos
AuthName "auth-realm"
KrbMethodNegotiate on
KrbMethodK5Passwd off
Krb5Keytab /your/path/to/keytab.file
require valid-user
</Location>
文档中有大量示例。这里有 Tomcat 官方文档:https://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
网络应用认证
您不需要在web.xml 中配置任何有关安全约束的内容,使用此配置,Apache 将验证用户而不是 Tomcat,并且 Tomcat 将在 HTTP 请求中接收用户的主体名称。
Tomcat(和任何其他 servlet 容器)会将用户的主体封装到 request.getRemoteUser()。
希望对你有帮助。