自从我用 Java 编写代码以来已经有一段时间了,所以我可能遗漏了一些明显的东西。我想通过 JDBC 连接到数据库(我需要支持很多 - SQL Server、MySQL 等)。但是,我想使用 Java 8 中添加的 Microsoft S4U Java 扩展支持来实现 Kerberos 委派。我不希望用户必须在我的中间层服务器上输入他们的凭据。我想使用 S4U 代表用户获取中间层服务器的票证,并使用它通过 doAs 函数(Subject.doAs 或 doAsPrivileged)调用 JDBC 代码。
我使用 C++ 和 ODBC 在 Windows 上添加了对协议转换和约束委派的支持。但我不知道如何用 Java 做同样的事情。关于 Java 的 S4U 文档很少。此页面似乎包含最多的信息 -http://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/jgss-features.html http://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/jgss-features.html。该页面显示“一个新的公共方法 (GSSCredential::impersonate) 已添加到 com.sun.security.jgss 包中以实现这些扩展。”基于http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/single-signon.html http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/single-signon.html,我认为我需要使用类 LoginContext 和 subject 来调用 JDBC 连接调用上的 doAs,以便连接在 subject 的凭据下进行。但是如何在组合中使用 GSSCredential::impersonate 呢?
谢谢,
埃德
这是我在网上进行了大量探索后得到的代码:
GSSManager manager = GSSManager.getInstance();
GSSCredential self = manager.createCredential(GSSCredential.INITIATE_ONLY);
GSSName user = manager.createName("myuser", GSSName.NT_USER_NAME);
GSSCredential impCred = ((ExtendedGSSCredential)self).impersonate(user);
Subject mySubject = new Subject();
mySubject.getPrivateCredentials().add(impCred);
PrivilegedAction action = new ClientAction();
Subject.doAs(mySubject, action);
我现在得到“GSSException:在 GSS-API 级别未指定故障(机制级别:尝试
获取 S4U2self 凭据失败!)”在模拟通话中,我仍在调查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)