Java SPNEGO身份验证和Kerberos约束委派(KCD)到后端服务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java SPNEGO身份验证和Kerberos约束委派(KCD)到后端服务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2373字,纯文字阅读大概需要4分钟。
内容图文
我有一个Java Web应用程序,它在Windows Active Directory环境中对客户端进行SPNEGO身份验证.
为了验证用户,我们使用了旧的SPNEGO SourceForge项目中的代码.
String encodedAuthToken = (String) credentials;
LOG.debug("Encoded auth token: " + encodedAuthToken);
byte[] authToken = B64Code.decode(encodedAuthToken);
GSSManager manager = GSSManager.getInstance();
try {
Oid krb5Oid = new Oid("1.3.6.1.5.5.2");
GSSName gssName = manager.createName(_targetName, null);
GSSCredential serverCreds = manager.createCredential(gssName, GSSCredential.INDEFINITE_LIFETIME, krb5Oid, GSSCredential.INITIATE_AND_ACCEPT);
GSSContext gContext = manager.createContext(serverCreds);
if (gContext != null) {
while (!gContext.isEstablished()) {
authToken = gContext.acceptSecContext(authToken, 0, authToken.length);
}
if (gContext.isEstablished()) {
// Login succeeded!
String clientName = gContext.getSrcName().toString();
}
}
}
身份验证工作正常,但我们还要求使用约束委派将用户凭据委派给后端服务(Exchange EWS).
在我们的AD中配置它时,它看起来像一个小差异,但事实并非如此.看到:
AD delegation settings
不同之处在于:msdn.microsoft.com/en-us/library/cc246080.aspx?f=255\u0026amp;MSPPError=-2147217396
通过无约束委派,我们可以在调用后端服务时简单地使用可用的委派凭据,这一切都很好:
GSSCredential delegatedCreds = gContext.getDelegCred()
SpnegoHttpURLConnection conn = new SpnegoHttpURLConnection(clientCreds);
通过约束委派,我们无法访问用户TGT,似乎我们需要使用Java 8支持的MS-SFU(S4U2proxy)Kerberos扩展.
我能找到的唯一例子是这一个:https://github.com/ymartin59/java-kerberos-sfudemo(感谢Yves Martin!)
现在我的问题…在我的身份验证后,我基本上得到了经过身份验证的用户的用户名(请参阅上面代码中的“clientName”).
我们真的需要使用S4U2self机制来冒充用户吗?
客户端刚刚向我们发送了Kerberos Service Ticket(包含在我无法解码的SPNEGO令牌中).
理想情况下,我们应该能够使用该服务票证和我自己的服务的TGT来验证用户(使用S4U2proxy机制)?
但我不明白怎么做.
那么现在我想知道是否可以将我们的SPNEGO身份验证与S4U2proxy委派联系在一起?
非常感谢您对此提出的任何意见.
解决方法:
我最近一直在做这样的事情,但我正在使用春天安全kerberos.我在github here上举了一个例子.关键是我发现我需要设置使用约束委托,就像你想要它和S4U2Proxy一样,确保(如果你使用的是Oracle / OpenJDK)你在你的设置中设置isInitiator = true JAAS Config,这样当调用getDelegCred时,你会得到一个Krb5ProxyCredential.请参阅注释here.使用该凭据,您可以使用它来代表用户创建服务票证令牌,以限制您以正常方式使用的服务,例如this.
内容总结
以上是互联网集市为您收集整理的Java SPNEGO身份验证和Kerberos约束委派(KCD)到后端服务全部内容,希望文章能够帮你解决Java SPNEGO身份验证和Kerberos约束委派(KCD)到后端服务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。