我试图连接我们的Windows客户端应用程序使用单点login机制。 我遵循可以在这里find的解释。 我已经在第一步工作中遇到了麻烦,那就是获得“签名用户票证授予票”。 当运行我的unit testing(代码见下文),我得到以下exception:
javax.security.auth.login.LoginException: Unable to obtain Princpal Name for authentication at com.sun.security.auth.module.Krb5LoginModule.promptForName(Krb5LoginModule.java:800) at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:671) at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:584) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at javax.security.auth.login.LoginContext.invoke(LoginContext.java:784) at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203) at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698) at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:695) at javax.security.auth.login.LoginContext.login(LoginContext.java:594) at org.myapp.test.cases.SSOTest.testSSO(SSOTest.java:28)
当我使用Java 7运行testing时,会发生这种情况。我认为这意味着票据caching是空的。 但是,当我使用Java 6运行testing时,login成功,我可以从LoginContext检索完全填充的Subject对象。 当我在这里阅读时,Java 7现在完全尊重允许/拒绝导出TGT的Windows 7策略。 所以我在我的registry中设置了allowtgtsessionkey值,希望能解决我的问题。 但是尽pipe重新login和重新启动,我仍然无法使用Java 7访问我的TGT。使用Java 6,它工作得很好。 任何人都可以指出我错过了什么?
SSOTest.java:
@Test public void testSSO() { System.setProperty("java.security.auth.login.config","D:\login.conf"); LoginContext lc = null; try { lc = new LoginContext("TestLoginContext1"); } catch (LoginException e1) { e1.printstacktrace(); } try { lc.login(); // Exception happens here } catch (LoginException e) { e.printstacktrace(); } Subject signedOnUserSubject = lc.getSubject(); System.out.println(signedOnUserSubject); }
login.conf的
在Windows中使用MIdistream的问题
简单和可扩展的非托pipe替代Amazon S3
Windows Django的服务器
Process.Start(“IIS Manager.lnk”)失败,“系统找不到指定的文件”
SWT禁用shell全屏模式
TestLoginContext1 { com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true doNotPrompt=true debug=true; };
的krb5.conf
[libdefaults] default_realm = MY.DOMAIN.COM [realms] MY.DOMAIN.COM = { kdc = domaincontroller.my.domain.com admin_server = domaincontroller.my.domain.com default_domain = MY.DOMAIN.COM }
在使用DWM组合的窗口上使用GDI进行绘图时,是否可以防止撕裂工件?
如何使用C#findWindows服务的安装目录?
运行“docker-compose up”会在Windows上引发“没有模块名为fnctl”的错误
Windows Mobile 5 SDK是否适用于Windows 7.5芒果操作系统手机
使用DlImport,Entrypoint从C#调用名称空间中的C ++函数
看来这是Windows的限制,当涉及到也在本地管理组的帐户。 我在这里阅读以下内容:
已知的问题
如果AD帐户也添加到客户端PC上的本地管理员组中,则Microsoft将限制此类客户端获取票证的会话密钥(即使您将allowtgtsessionkey注册表项设置为1)。 解决方法是:只要忘记你是一个登录用户,调用kinit.exe。 不要依赖于LSA凭据缓存。
在最近的修补程序([35] http://support.microsoft.com/kb/942219/en-us ,应包含在Vista SP1中),此限制解除正常
服务票。 但是,它仍然适用于TGT。 由于Java使用TGT来获取其他服务(标准Kerberos进程)的票据,所以此更新对Windows上的jgss编程没有任何好处。
而且,即使Java的实现改为读取
服务票据从LSA缓存,它仍然不能执行委派,因为TGT总是需要在这种情况下。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。