使用kerberos/spnego对服务器端的Swing客户端用户进行身份验证

使用kerberos/spnego对服务器端的Swing客户端用户进行身份验证,swing,single-sign-on,kerberos,jaas,spnego,Swing,Single Sign On,Kerberos,Jaas,Spnego,我正在使用kerberos协议对Java Swing应用程序的用户进行身份验证。我能够在客户端成功地进行身份验证,但在服务器端获取用户凭据和角色时遇到问题,我得到了需要特定角色才能创建这些EJB的EJB jboss-app.xml看起来像 <jboss-app> <security-domain>java:/jaas/spnego-server</security-domain> <loader-repository>

我正在使用kerberos协议对Java Swing应用程序的用户进行身份验证。我能够在客户端成功地进行身份验证,但在服务器端获取用户凭据和角色时遇到问题,我得到了需要特定角色才能创建这些EJB的EJB

jboss-app.xml看起来像

 <jboss-app>
    <security-domain>java:/jaas/spnego-server</security-domain>       
    <loader-repository>paymenttracker:loader=paymenttracker.ear</loader-repository>
 </jboss-app>

您的
krb5.ini
正确吗?您是否尝试使用该键选项卡创建登录上下文。在您尝试JBoss之前,这必须成功。基本上,我没有改变JBoss和为spring应用程序工作的krb5.ini中的任何内容。我在jboss服务器的login-config.xml中添加了登录模块。在jboss-app.xml定义的java:/jaas/spnego服务器中。当调用PrivilegedExceptionAction(运行方法)实现类时,会在失败的地方进行ejb查找。在尝试执行ejb查找时,会涉及Krb5LoginModule类并打印调试消息。另外,服务器将如何获取登录的用户名?您是否已验证客户端是否确实在发送安全令牌?你有保安经理在工作吗?这很奇怪:拒绝:主语为subject=subject的调用方:。。。有些配置错误。您可能完全正确,客户端似乎读取了票据,但不确定是否将其传递给服务器,服务器端的主体似乎为空,是否需要在某处配置org.jboss.security.negotiation.NegotiationAuthenticator?你能告诉我如何确保车票通过吗?我使用的是jboss 5.1.0。调试Krb5LoginModule时,主题为emptyInstall Fiddler并检查HTTP请求。它应该包含
WWW-Athenticate
信息。
     <application-policy name="spnego-server"><authentication> 
    <login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required" >
<module-option name="storeKey">true</module-option> 
<module-option name="debug">true</module-option> 
<module-option name="useKeyTab">true</module-option> 
<module-option name="keyTab">file://c:/ker/tem.keytab</module-option> 
<module-option name="principal">HTTP/ws6421.ebrd.com</module-option> 
<module-option name="doNotPrompt">true</module-option> 
<module-option name="isInitiator">false</module-option> 
</login-module></authentication>
</application-policy> 
16:09:28,990 INFO  [STDOUT] Debug is  true storeKey true useTicketCache false useKeyTab true doNotPrompt true
ticketCache is null isInitiator false KeyTab is file://c:/kerberos/ws6421.keytab refreshKrb5Config is false pr
incipal is HTTP/ws6421.my.com tryFirstPass is false useFirstPass is false storePass is false clearPass is fa
lse
16:09:29,087 INFO  [STDOUT] principal's key obtained from the keytab
16:09:29,087 INFO  [STDOUT] principal is HTTP/ws6421.my.com@MY.COM
16:09:29,088 INFO  [STDOUT] EncryptionKey: keyType=23 keyBytes (hex dump)=0000: A9 DD 6C AB C5 D3 A0 9D   C8 4
4 18 52 78 3E AB 82  ..l......D.Rx>..
16:09:29,094 INFO  [STDOUT] Added server's keyKerberos Principal HTTP/ws6421.ebrd.com@MY.COMKey Version 0key
 EncryptionKey: keyType=23 keyBytes (hex dump)=
0000: A9 DD 6C AB C5 D3 A0 9D   C8 44 18 52 78 3E AB 82  ..l......D.Rx>..
16:09:29,095 INFO  [STDOUT]             [Krb5LoginModule] added Krb5Principal  HTTP/ws6421.my.com@MY.COM t
o Subject
16:09:29,098 INFO  [STDOUT] Commit Succeeded
16:09:29,135 ERROR [SecurityInterceptor] Error in Security Interceptor
java.lang.SecurityException: Denied: caller with subject=Subject:
        Principal: HTTP/ws6421.my.com@MY.COM
        Private Credential: Kerberos Principal HTTP/ws6421.my.com@MY.COMKey Version 0key EncryptionKey: ke
yType=23 keyBytes (hex dump)=
0000: A9 DD 6C AB C5 D3 A0 9D   C8 44 18 52 78 3E AB 82  ..l......D.Rx>..


 and security context post-mapping roles=null: ejbMethod=public abstract services.ejb.login.SBLogin services.e
jb.login.SBLoginHome.create() throws javax.ejb.CreateException,java.rmi.RemoteException
        at org.jboss.ejb.plugins.SecurityInterceptor.checkSecurityContext(SecurityInterceptor.java:368)
        at org.jboss.ejb.plugins.SecurityInterceptor.process(SecurityInterceptor.java:243)