java Kerberos如何获取主体或客户端名称?
我在AD中配置了一个具有委派kerberos票证的用户:
klist
Ticket cache: FILE:/tmp/krb5cc_527
Default principal: user1@EXAMPLE
Valid starting Expires Service principal 11/27/15 16:28:27 11/28/15 02:28:27 krbtgt/EXAMPLE.com@EXAMPLE.COM
我怎样才能得到这个“user1”?在此客户端域帐户上(客户端jsp?或服务器端?)我想在点击按钮后提取这个值,并将它传回(带有backurl)到另一个java应用程序
编辑: 我的Apache配置:
<Location /kerb >
AuthType Kerberos
AuthName "auth-realm"
KrbMethodNegotiate off
KrbMethodK5Passwd off
KrbServiceName HTTP
Krb5Keytab /etc/krb5.keytab
require valid-user
</Location>
ProxyPreserveHost On
ProxyPass /kerb ajp://120.201.131.169:8019/myApp
ProxyPassReverse /kerb ajp://120.201.131.169:8019/myApp
但是我收到了
[Sun Dec 13 18:17:32 2015] [debug] src/mod_auth_kerb.c(1944): [client
126.185.3.202] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
# 1 楼答案
我明白了!我不知道到底出了什么问题,但现在它起作用了。 我可以通过以下配置从HTTP头简单地获取主体(我将此配置从/conf.d移到了main/conf/httpd.conf文件)。什么是进口的。在RHEL httpd服务器上,apache用户应该有权读取/etc/krb5。键表。就我而言:
# 2 楼答案
视情况而定。在我的例子中,我使用
mod_kerb
配置了一个Apache服务器,并通过AJP将http请求转发给Tomcat在这种情况下,Tomcat AJP Conctor配置为
tomcatAuthentication=false
,我可以使用request.getRemoteUser()
从JSP和Servlet获得用户身份验证显然,用户字符串在{{CD4}}之后附带域信息,所以您必须考虑它。
如果您对我的解决方案感兴趣,我可以详细说明我的答案
编辑
我编辑我的答案,以提供有关配置Tomcat以使用Kerberos的更多信息
配置NTP
在每个Apache服务器中,首先配置的是非常常见的Tomp客户端。如果没有日期和时间同步,很容易出现
clock skew too great
或postdating
问题为服务器创建AD主体
您需要在AD中创建主体以用于服务器主体身份验证。必须获取此主体的键表文件。对不起,我不能告诉你怎么做
在Apache服务器上安装和配置Kerberos
一旦有了服务器主体和keytab文件,就可以配置Apache服务器了。将kerberos安装到该系统中并配置
/etc/krb5.conf
。此文件的示例如下:检查:
确保您的服务器配置正确
安装和配置mod_auth_路缘石
安装
mod_auth_kerb
apache模块,并在每个location
、directory
、virtual host
或任何您需要的地方配置它的使用,请参见下文。此配置非常依赖于您的kerberos服务器,您必须使用一些参数,如KDC验证、协商、是否具有权威性等等最重要的参数是
Krb5Keytab
,但您可以检查this page以了解所有参数。下面是一个示例location
:当您尝试访问此位置时
http://your.apache.server/sample
Apache将尝试通过kerberos检查用户凭据AJP配置
对于AJP配置(我之前已经回答了这个问题,但我在这里剪切粘贴并适应了这个问题),程序如下:
libapache2-mod-jk
。(在debian/ubuntu中,您可以运行sudo apt-get install libapache2-mod-jk
)李>jk
或类似的新模块。您必须启用它(在debian/ubuntu中,您可以运行sudo a2enmod jk
)李>JkWorkersFile
指向何处。需要此文件来配置管理与tomcat应用程序通信的workers
李>示例工人文件:
每个工人都可以指向不同的tomcat服务器。端口必须与配置到
$CATALINA_HOME/conf/server.xml
中的端口相同。在该文件中,有一个用于AJP协议的连接器:每个工人都必须指向这个端口
最后,您可以使用
JkMount workerName
配置您的位置(或任何位置),以指示Apache必须将此url转发给适当的工作程序:有大量的样本和文档。这里是Tomcat官方文档:https://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
Web应用程序身份验证
您不需要在
web.xml
中配置任何关于安全约束的内容,通过这种配置,Apache将认证用户而不是Tomcat,Tomcat将在HTTP请求中接收用户的主体名称Tomcat(和任何其他servlet容器)将把用户的主体封装到
request.getRemoteUser()
中希望能有帮助
# 3 楼答案
尝试检查您的keytab文件。我也有类似的问题,当我跑步的时候
cat httpd。键表
它显示的是纯文本,这是不正常的,keytab文件应该包含ASCII字符,它是一个二进制文件。然后用“$Admin”重新生成它的域名