相关疑难解决方法(0)

Java或命令行工具是否有办法使用本机SSPI API获取服务的Kerberos票证?

我想在Java中使用Kerberos实现单点登录,并且已成功设法使用Windows登录中的票证为服务创建票证.不幸的是,我只能在启用注册表项"allowtgtsessionkey"时创建该票证.一旦禁用它,我收到一条消息"标识符与预期值不匹配(906)".注册表项记录在http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.htmlhttp://support.microsoft.com/kb/308339上.

不幸的是,我无法访问将使用我的应用程序的计算机上的注册表,因此我正在寻找一种方法来执行此操作而无需修改它.当我在Internet Explorer或Mozilla Firefox中通过SPNEGO进行单点登录时,他们会在我的票证缓存中创建一个服务票证,因此必须有一种方法可以在不设置注册表键的情况下执行此操作.有没有人知道如何用Java做到这一点?

感谢您的帮助,memminger

更新:我放弃了这个问题.Windows注册表项阻止访问故障单缓存中的故障单(更准确地说:主题).Windows上的Java使用自己的GSSAPI实现,我认为需要访问Ticket才能创建Service Ticket.但是,SSPI Windows API具有对票证缓存的完全访问权限,因此可以创建服务票证.Web浏览器使用此API,但Java不使用它(根据http://java.sun.com/developer/technicalArticles/J2SE/security/#3).当我在访问网页一次后禁用了Firefox中的SSPI(因此创建了服务票证)时,我仍然可以访问该页面,因此使用SPPI API创建服务票证可能足以使用命令行工具.

对我们来说,这意味着我们现在可以放弃单点登录(这对我们来说是不可接受的),或者我们在应用程序的客户端进行身份验证(因为我们只能读出用户名但不能验证机票上的服务器),这是一个主要的安全风险.另一个例子是安全性限制如何导致更大的安全漏洞,因为它们变得太复杂而无法使用.

java windows kerberos active-directory single-sign-on

18
推荐指数
1
解决办法
4999
查看次数