Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解并探索JAAS-GSSAPI-JNDI如何在引擎盖后协同工作_Java_Kerberos_Jndi_Jaas_Gssapi - Fatal编程技术网

Java 了解并探索JAAS-GSSAPI-JNDI如何在引擎盖后协同工作

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

我一直试图理解这些不同的API是如何在幕后粘合在一起的。虽然这个问题似乎很广泛,但我也想了解一个特定的场景。任何关于这方面的指针都可以进一步调试,我们将不胜感激

我正在学习这个基础教程-

在这方面,我特别想理解,在创建
DirContext

//请求使用“GSSAPI”SASL机制,通过使用已建立的Kerberos凭据进行身份验证 环境put(Context.SECURITY_认证,“GSSAPI”)

当环境哈希表中的
Context.SECURITY\u AUTHENTICATION
设置为
GSSAPI
时,在创建DirContext/LDAPContext的过程中,高级步骤是什么

  • LDAPContext
    创建是否需要主题的TGT
  • 登录文本#login()过程中获取的受试者的TGT/Subject/Private-public凭证的作用是什么
  • 让我们从头开始:

     LoginContext lc = new LoginContext(...)
     lc.login() 
    
    这段代码的作用是,如果身份验证成功,它将与KDC服务器通信,并从中获取TGT!登录上下文中填充了一个主题(已验证),该主题包含凭据的所有信息

    完成后,将使用以下代码执行JNDI

  • 将代码作为主题的特权执行到底意味着什么

    Subject.doAs(lc.getSubject(), new JndiAction(args));
    
  • 我无法理解从Subject.doAs(…)返回的对象将发生什么情况

    场景:

  • 假设Subject.doAs(…)方法通过使用PrivilegedAction{…}返回DirContext,以便以后可以使用该上下文

  • 如果创建此上下文的主题已注销,或者其
    凭据无效或已更改,则此上下文会发生什么情况?
    是否仍能继续工作

  • TGT是否用于后面的任何
    ctx
    操作,如search(),或者图片中的GSSAPI是否用于这些操作

  • active directory如何验证此上下文的有效性


  • 要求

    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
    创建是否需要主题的TGT
  • 这将取决于LDAP服务器配置,但通常不需要

    要使用简单身份验证,可以执行以下操作:

    Hashtable 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(…)方法返回的 通过使用PrivilegedAction{…},以便以后可以使用上下文
  • 凭证/票据未绑定到
    DirContext
    对象, 因此,如果不使用
    Subject.doAs
    ,它将无法继续工作

  • 如果它所通过的主题是 是否已注销创建的证书或其凭据已无效或更改?它还会继续工作吗
  • 如果用户未登录,则凭据/票证可能会继续工作,也可能不会继续工作 注销或禁用,将取决于ldap服务器实现

  • TGT是否用于任何稍后的ctx操作,如search() 或者GSSAPI是否出现在这些操作的图片中
  • 可以,但您需要访问t