Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kerberos如何获取主体或客户端名称?_Java_Jsp_Kerberos - Fatal编程技术网

Java Kerberos如何获取主体或客户端名称?

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配

我在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获得用户身份验证

显然,用户字符串在@ < /Cord>之后出现域信息,所以您必须考虑它。 如果您对我的解决方案感兴趣,我可以详细说明我的答案

编辑 我编辑我的答案,以提供有关配置Tomcat以使用Kerberos的更多信息

配置NTP 首先,在每个系统AD服务器、Apache服务器和Tomcat服务器中配置NTP客户端是很常见的。如果没有日期和时间同步,很容易出现
时钟偏差过大
后定日期问题

为服务器创建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。我向您展示的配置已经用apache
2.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>