我已经被困这项任务好几天了..在我的网络应用程序的登录表单中,在用户输入用户名和密码之前,我想在请求中收到他的Windows帐户的用户名。经过大量的研究,我发现Kerberos是我必须使用的,但我不知道如何。 我可以访问Active Directory服务器,因此我创建了服务主体名称,在Java上建立了与AD的连接,但是我无法获得Windows用户。
现在我正在尝试使用Waffle,正如我所读到的,就像导入一些JAR一样简单,在JSP文件中获取主体名称(假设是Windows用户),但正如我所说,我做不到。
有没有人做过类似的事情?
任何帮助都会非常感激,
提前致谢。
更新:
正如您所要求的,这就是我到目前为止所做的事情:
在WServer 2012 R2(我有AD)上,我创建了一个名为santi.mitrol.net的用户
使用以下命令将spn注册到该用户:
setspn -A HTTP/santi.mitrol.net santi.mitrol.net
之后,我创建了相关的keytab:
ktpass -out C:\temp\test.keytab -princ HTTP/santi.mitrol.net@DEV-MITROL.LOCAL -mapUser santi.mitrol.net -mapOp set -pass MYPASS -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL
在此设置之后,我创建了这个项目:https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-win-auth/src/main但我无法让它工作......
在我的web.xml上使用Waffle相同..我有这个:
<filter-name>SecurityFilter</filter-name>
<!--<filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>-->
<filter-class>net.mitrol.config.activedirectory.CustomFilter</filter-class>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
但是当我向Tomcat请求我已经从另一台PC部署在我的PC上时,他们会得到输入凭据的提示,这不是我需要的,我只需要在请求时收到在发出请求的计算机上登录的Windows用户。
Thanksssss
答案 0 :(得分:0)
好的,两周后,我终于可以开始工作!!!!
我会尽可能详细地发布整个过程,所以没有人会遭受我所遭受的痛苦。
在这个过程中,我在domian DEV-MITROL.LOCAL中使用了三台计算机:
域控制器: 主机名:AR-SRV-DC-007 用户:管理员 传递:somePass40
Tomcat Machine: ip:192.168.40.91(我在DC上创建了一个dns条目,将此IP解析为santi.dev-mitrol.net) 用户:tomcat 传递:tomcatPass40
客户端计算机向Tomcat计算机发出请求(如果您从运行服务器的同一台计算机发出请求,它将无法正常工作)
步骤:
1)使用管理员用户y登录DC,创建了此SPN:
setspn -A HTTP/santi.dev-mitrol.net tomcat
setspn -A HTTP/santi.dev-mitrol.net.dev-mitrol.local tomcat
2)在“管理工具&gt; Active Directory用户和计算机”上找到用户“tomcat”,然后在“委派”选项卡中选择“信任此用户以委派任何服务(仅限Kerberos)”和“帐户”中的选项选项卡,在“帐户选项”中选中“不要求Kerberos预先验证”。
3)使用此命令创建密钥表:
ktpass -princ HTTP/santi.dev-mitrol.net.dev-mitrol.local@DEV-MITROL.LOCAL -mapuser tomcat@DEV-MITROL.LOCAL -pass * -ptype KRB5_NT_PRINCIPAL -out test.keytab
你必须在这里使用的密码是:tomcatPass40。
4)现在,是时候登录tomcat用户并粘贴在此路径上创建的keytab:
C:\ Program Files \ Apache Software Foundation \ Tomcat 8.5 \ conf \
除此之外,您还必须在此文件夹中再创建两个文件:
KRB5.ini
[libdefaults]
default_realm = DEV-MITROL.LOCAL
default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
forwardable=true
[realms]
DEV-MITROL.LOCAL = {
kdc = AR-SRV-DC-007
}
[domain_realm]
dev-mitrol.local= DEV-MITROL.LOCAL
.dev-mitrol.local= DEV-MITROL.LOCAL
和JAAS.conf
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required;
};
com.sun.security.jgss.krb5.accept {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
useKeyTab=true
keyTab="file:///C:/Program Files/Apache Software Foundation/Tomcat 8.5/conf/test.keytab"
principal="HTTP/santi.dev-mitrol.net.dev-mitrol.local";
};
5)编辑同一文件夹中的web.xml文件,并包含SPNEGO过滤器:
<filter>
<filter-name>SpnegoHttpFilter</filter-name>
<filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>
<init-param>
<param-name>spnego.allow.basic</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.localhost</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.unsecure.basic</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.login.client.module</param-name>
<param-value>com.sun.security.jgss.krb5.initiate</param-value>
</init-param>
<init-param>
<param-name>spnego.krb5.conf</param-name>
<param-value>krb5.ini</param-value>
</init-param>
<init-param>
<param-name>spnego.login.conf</param-name>
<param-value>jaas.conf</param-value>
</init-param>
<init-param>
<param-name>spnego.login.server.module</param-name>
<param-value>com.sun.security.jgss.krb5.accept</param-value>
</init-param>
<init-param>
<param-name>spnego.prompt.ntlm</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.logger.level</param-name>
<param-value>1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpnegoHttpFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6)使用以下内容在“C:\ Program Files \ Apache Software Foundation \ Tomcat 8.5 \ webapps \ ROOT”中创建一个JSP文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Hello SPNEGO Example</title>
</head>
<body>
Hello <%= request.getRemoteUser() %> !
</body>
</html>
7)如果您已按照此步骤操作,它应该正常工作,您将根据请求收到Windows用户的名称。
希望它有所帮助。