Java 了解并探索JAAS-GSSAPI-JNDI如何在引擎盖后协同工作
我一直试图理解这些不同的API是如何在幕后粘合在一起的。虽然这个问题似乎很广泛,但我也想了解一个特定的场景。任何关于这方面的指针都可以进一步调试,我们将不胜感激 我正在学习这个基础教程- 在这方面,我特别想理解,在创建Java 了解并探索JAAS-GSSAPI-JNDI如何在引擎盖后协同工作,java,kerberos,jndi,jaas,gssapi,Java,Kerberos,Jndi,Jaas,Gssapi,我一直试图理解这些不同的API是如何在幕后粘合在一起的。虽然这个问题似乎很广泛,但我也想了解一个特定的场景。任何关于这方面的指针都可以进一步调试,我们将不胜感激 我正在学习这个基础教程- 在这方面,我特别想理解,在创建DirContext //请求使用“GSSAPI”SASL机制,通过使用已建立的Kerberos凭据进行身份验证 环境put(Context.SECURITY_认证,“GSSAPI”) 当环境哈希表中的Context.SECURITY\u AUTHENTICATION设置为GSSA
DirContext
//请求使用“GSSAPI”SASL机制,通过使用已建立的Kerberos凭据进行身份验证
环境put(Context.SECURITY_认证,“GSSAPI”)
当环境哈希表中的Context.SECURITY\u AUTHENTICATION
设置为GSSAPI
时,在创建DirContext/LDAPContext的过程中,高级步骤是什么
LDAPContext
创建是否需要主题的TGT LoginContext lc = new LoginContext(...)
lc.login()
这段代码的作用是,如果身份验证成功,它将与KDC服务器通信,并从中获取TGT!登录上下文中填充了一个主题(已验证),该主题包含凭据的所有信息
完成后,将使用以下代码执行JNDI
Subject.doAs(lc.getSubject(), new JndiAction(args));
凭据无效或已更改,则此上下文会发生什么情况?
是否仍能继续工作
ctx
操作,如search(),或者图片中的GSSAPI是否用于这些操作
要求 a。我们不希望在
PrivilegedAction#run
中执行任何JNDI操作。我们只想返回要缓存或稍后使用的上下文
对象
b。由于某些原因,我们对单个krb.conf
文件有一个特殊的要求。我们为每个后续请求创建并销毁krb.conf
c。我问问题#5的原因是-一旦按照上述说明重新生成krb.conf文件,内存中LoginContext#Subject
对象中的所有凭据都将失效,无法进一步使用
d。在这种情况下,我们可以使用缓存的上下文吗
任何有助于理解实际工作的帮助都将不胜感激
我特别想理解,在创建DirContext的过程中,这一行实际上意味着什么
// Request the use of the "GSSAPI" SASL mechanism Authenticate by using already established Kerberos credentials
env.put(Context.SECURITY_AUTHENTICATION, "GSSAPI");
这一部分非常简单,它只是告诉ldap客户机使用
GSSAPI身份验证,而不是“简单”或“无”。虽然理论上“GSSAPI”应该支持一系列不同的实现, 在这个Java实现中,它只支持kerberosV5。
简单身份验证就是将用户名/密码直接传递给LDAP服务器。
如果LDAP服务器不要求查询身份验证,则不会出现任何问题。
GSSAPI在这里使用存储在先前获取的主题中的kerberos凭据
LDAPContext
创建是否需要主题的TGTHashtable env=new Hashtable();
put(Context.INITIAL\u Context\u工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
环境put(Context.SECURITY_PRINCIPAL,“Administrator@corp.example.com");
env.put(Context.PROVIDER\u URL,“ldap://WIN-MKR9VI69FT4.corp.example.com/");
环境put(Context.SECURITY_认证,“simple”);
环境put(Context.SECURITY_凭证,“password.tocharray());
DirContext ctx=新的初始DirContext(env);
在LoginContext#login()过程中获取的主题的TGT/Subject/Private-public凭据的作用是什么
在最初的示例中,它们用于获取用于LDAP服务器的服务票证
将代码作为主题的特权执行到底意味着什么
Subject.doAs(lc.getSubject(), new JndiAction(args));
Java的SecurityManager
体系结构既复杂又陈旧,
不谈所有细节,这里发生的事情或多或少,
只需使主题
对象可用于特权操作中运行的代码
当kerberos代码查找凭据时,
DirContext
对象,
因此,如果不使用Subject.doAs
,它将无法继续工作