LDAP V3协议使用SASL的支持可插拔认证。这意味着LDAP客户端和服务器可以被配置在谈判和使用认证机制可能是非标准和/或定制,取决于客户端和服务器所需的保护水平 。不支持SASL的LDAP v2协议。
目前有几个SASL机制的定义:
前面的列表的机制,流行LDAP服务器(如OpenLDAP的,从甲骨文,和微软的)支持外部,DIGEST - MD5,并作为强制性LDAP的默认机制的Kerberos V5。RFC 2829建议使用DIGEST - MD5 v3服务器。
下面是一个简单的程序,找出LDAP服务器支持的SASL机制的列表。
/ /创建初始上下文 DirContext ctx =new InitialDirContext(); / /读取从根DSE supportedSASLMechanisms Attributes attrs = ctx.getAttributes("ldap://localhost:389", new String[]{"supportedSASLMechanisms"});
下面是在一个支持外部SASL机制的服务器上运行这个程序产生的输出。
{supportedsaslmechanisms=supportedSASLMechanisms: EXTERNAL, GSSAPI, DIGEST-MD5}
要使用特定的SASL机制,可以指定其互联网编号分配机构(IANA)注册机制的名称 Context.SECURITY_AUTHENTICATION环境属性。您也可以指定一个LDAP提供机制的清单尝试 。这是通过指定的空间分隔机制名称的有序列表 。LDAP提供程序将使用它找到一个实施的第一个机制。
下面是一个例子,要求LDAP提供商试图让DIGEST - MD5机制的执行情况,如果是这样的不可用,使用GSSAPI的一个。
env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5 GSSAPI");
从应用程序的用户,你可能会得到这样的认证机制,或者,您可能会通过调用类似前面显示的方法来要求LDAP服务器。LDAP提供者本身并不会咨询此服务器来获得相应的信息。它只是试图找到并使用指定的机制的实现。
在平台的LDAP提供内置,DIGEST - MD5的,和GSSAPI(Kerberos V5的)SASL机制的支持。您可以添加额外的机制的支持。
一些机制,如外部不需要额外的输入-单机制的名称是足够的认证进行。外部的例子显示了如何使用外部的SASL机制 。
大多数其他机制需要一些额外的输入。根据这一机制,可能会有所不同类型的输入。以下是一些常见的输入机制。
如果程序(如代理服务器)是代表另一个实体验证,身份验证和授权的ID可能会有所不同。验证ID指定使用的 Context.SECURITY_PRINCIPAL环境属性。它的类型java.lang.String 。
验证ID的密码/关键是指定使用的 Context.SECURITY_CREDENTIALS环境属性。它的类型是java.lang.String时,char数组的(char[]),或字节数组(byte[] )。如果密码是一个字节数组,然后它转化成一个 char 数组使用UTF - 8编码。
如果已设置的“java.naming.security.sasl.authorizationId”属性,然后使用它的值作为授权ID。它的值的类型必须是java.lang.String的。默认情况下,空字符串使用的授权ID,指示服务器,来自客户端的身份验证凭据的授权ID 。
DIGEST - MD5的示例演示如何使用Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIALS DIGEST - MD5验证的属性 。
如果一个机制需要输入已经描述过的以外,然后你需要定义一个回调机制,使用对象,您可以检查出在回调例如 JNDI教程 。这节课的下一部分将讨论如何使用SASL DIGEST - MD5认证机制。 SASL的政策 , GSS API(Kerberos V5的) 和 CRAM - MD5 机制是覆盖在JNDI教程。