Java Kerberos如何获取主体或客户端名称?
我在AD中配置了一个具有委派kerberos票证的用户: 克莱斯特 票证缓存:文件:/tmp/krb5cc_527 默认委托人:user1@EXAMPLE 有效启动过期服务主体11/27/15 16:28:27 11/28/15 02:28:27 krbtgt/示例。com@EXAMPLE.COM 我怎样才能得到这个“user1”?在这个客户端域帐户(客户端jsp?或服务器端?)上,我想在单击按钮后提取这个值,并将其传递回(带有backurl)到另一个java应用程序 编辑: 我的Apache配置:Java Kerberos如何获取主体或客户端名称?,java,jsp,kerberos,Java,Jsp,Kerberos,我在AD中配置了一个具有委派kerberos票证的用户: 克莱斯特 票证缓存:文件:/tmp/krb5cc_527 默认委托人:user1@EXAMPLE 有效启动过期服务主体11/27/15 16:28:27 11/28/15 02:28:27 krbtgt/示例。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
视情况而定。在我的例子中,我有一个配置了
mod_kerb
的Apache服务器,并通过AJP将http请求转发给Tomcat
在这种情况下,Tomcat AJP Conctor配置为tomcatAuthentication=false
,我可以使用request.getRemoteUser()
从JSP和Servlet获得用户身份验证
显然,用户字符串在
时钟偏差过大
或后定日期问题
为服务器创建AD主体
您需要在AD中创建主体以用于服务器主体身份验证。必须获取此主体的键表文件。对不起,我不能告诉你怎么做
在Apache服务器上安装和配置Kerberos
一旦有了服务器主体和keytab文件,就可以配置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_路缘石
安装mod_auth_kerb
apache模块,并在每个位置
、目录
、虚拟主机
或任何您需要的地方配置其使用,请参见下文。此配置非常依赖于您的kerberos服务器,您必须使用一些参数,如KDC验证、协商、是否具有权威性等等
最重要的参数是Krb5Keytab
,但您可以通过检查了解所有参数。这是一个示例位置
:
<Location /sample/>
AuthType Kerberos
AuthName "auth-realm"
KrbMethodNegotiate on
KrbMethodK5Passwd off
Krb5Keytab /your/path/to/keytab.file
require valid-user
</Location>
每个工人都可以指向不同的tomcat服务器。端口必须与配置到$CATALINA_HOME/conf/server.xml
中的端口相同。在该文件中,有一个用于AJP协议的连接器:
<Connector port="8009" protocol="AJP/1.3"
redirectPort="8443" tomcatAuthentication="false"/>
有大量的样本和文档。这里是Tomcat官方文档:
Web应用程序身份验证
您不需要在web.xml
中配置任何有关安全约束的内容,通过此配置,Apache将认证用户而不是Tomcat,Tomcat将在HTTP请求中接收用户的主体名称
Tomcat(和任何其他servlet容器)将把用户的主体封装到request.getRemoteUser()
中
希望有帮助。我明白了!我不知道到底出了什么问题,但现在它起作用了。
我可以通过以下配置从HTTP头简单地获取主体(我将此配置从/conf.d移到了main/conf/httpd.conf文件)。什么是进口的。在RHEL httpd服务器上,apache用户应该有权读取/etc/krb5.keytab。就我而言:
ps-ef | grep httpd
apache 27537 27535 0 16:18?00:00:00/usr/sbin/httpd
ServerName myhost.domain.com
#SSLRequireSSL
身份验证类型Kerberos
KrbMethodNegotiate On
KrbMethodK5Passwd关闭
KrbServiceName HTTP/nmyhost.domain。com@EXAMPLE.COM
KrbAuthRealms EXAMPLE.COM
Krb5KeyTab/etc/krb5.keytab
需要有效用户
重新启动发动机
RewriteCond%{LA-U:REMOTE_USER}(+)
重写规则[E=RU:%1]
头添加X-Remote-User“%{RU}e”env=RU
代理请求关闭
代理主机
ProxyPass/myAppajp://126.101.100.169:8029/myApp
ProxyPassReverse/myAppajp://126.101.100.169:8029/myApp
尝试检查您的密钥表文件。我也有类似的问题,当我跑步的时候
cat httpd.keytab
它显示的是纯文本,这是不正常的,keytab文件应该包含ASCII字符,它是一个二进制文件。必须使用域管理员帐户“$user.name”重新生成它,然后它才能工作。听起来不错!我知道我也有mod_auth_路缘,但我不熟悉配置(它是管理端…)。你能详细说明并粘贴一些apache、kerberos和tomcat配置吗?我使用Kerberos配置了RHEL和httpd-apache。在同一台主机上,我有带myGui应用程序的tomcat8。好的,我将编译一些信息,今晚我将发布它。我可以再问一个问题吗。我需要配置此工作人员吗?我有mod_proxy_ajp模块。我想知道如何将mod_auth_路缘与mod_proxy_ajp结合起来?我可以为其创建工作文件吗?您尝试了哪个版本的apache?我只有2.2。我向您展示的配置已经用apache2.2
和2.4
,mod\u auth\u kerb
和mod\u jk
进行了测试。我没有使用mod_proxy_ajp的经验,但我想以我告诉过你的类似方式使用它不会有任何问题。
ps=/
worker.list=worker1,worker2,...
# worker1 definition
worker.worker1.port=8009
worker.worker1.host=host or ip
worker.worker1.type=ajp13
# worker2 definition
....
<Connector port="8009" protocol="AJP/1.3"
redirectPort="8443" tomcatAuthentication="false"/>
<Location /sample/>
JkMount worker1
AuthType Kerberos
AuthName "auth-realm"
KrbMethodNegotiate on
KrbMethodK5Passwd off
Krb5Keytab /your/path/to/keytab.file
require valid-user
</Location>
<VirtualHost myhost.domain.com:80>
ServerName myhost.domain.com
<Location /myApp >
# SSLRequireSSL
AuthType Kerberos
KrbMethodNegotiate On
KrbMethodK5Passwd Off
KrbServiceName HTTP/nmyhost.domain.com@EXAMPLE.COM
KrbAuthRealms EXAMPLE.COM
Krb5KeyTab /etc/krb5.keytab
require valid-user
RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule . - [E=RU:%1]
Header add X-Remote-User "%{RU}e" env=RU
</Location>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /myApp ajp://126.101.100.169:8029/myApp
ProxyPassReverse /myApp ajp://126.101.100.169:8029/myApp
</VirtualHost>