SASL

LDAP v3 协议使用SASL支持* pluggable *身份验证。这意味着 LDAPClient 端和服务器可以配置为协商和使用可能的非标准和/或自定义机制进行身份验证,具体取决于 Client 端和服务器所需的保护级别。 LDAP v2 协议不支持 SASL。

当前定义了几种 SASL 机制:

LDAP 服务器支持的 SASL 机制

在上一个列表中的机制中,流行的 LDAP 服务器(例如来自 Oracle,OpenLDAP 和 Microsoft 的那些)支持外部,Digest-MD5 和 Kerberos V5. RFC 2829建议使用 Digest-MD5 作为 LDAP v3 服务器的强制性默认机制。

这是一个simple program,用于查找 LDAP 服务器支持的 SASL 机制的列表。

// Create initial context
DirContext ctx = new InitialDirContext();

// Read supportedSASLMechanisms from root DSE
Attributes attrs = ctx.getAttributes(
    "ldap://localhost:389", new String[]{"supportedSASLMechanisms"});

这是通过在支持外部 SASL 机制的服务器上运行该程序而产生的输出。

{supportedsaslmechanisms=supportedSASLMechanisms: 
                         EXTERNAL, GSSAPI, DIGEST-MD5}

指定身份验证机制

若要使用特定的 SASL 机制,请在Context.SECURITY_AUTHENTICATION环境属性中指定其 Internet 分配 Numbers 授权机构(IANA)注册的机制名称。您还可以指定 LDAP 提供程序try的机制列表。这是通过指定以空格分隔的机制名称的有序列表来完成的。 LDAP 提供程序将使用它找到实现的第一种机制。

这是一个示例,要求 LDAP 提供程序try获取 DIGEST-MD5 机制的实现,如果该实现不可用,则将其用于 GSSAPI。

env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5 GSSAPI");

您可能会从应用程序的用户那里获得身份验证机制的列表。或者,您可以通过类似于前面显示的呼叫来询问 LDAP 服务器来获取它。 LDAP 提供程序本身不咨询服务器以获取此信息。它只是try查找和使用指定机制的实现。

平台中的 LDAP 提供程序具有对外部,摘要 MD5 和 GSSAPI(Kerberos v5)SASL 机制的内置支持。您可以添加对其他机制的支持。

为验证机制指定 Importing

某些机制(例如外部机制)不需要其他 Importing-仅机制名称就足以进行身份验证。 External example显示了如何使用外部 SASL 机制。

大多数其他机制需要一些额外的 Importing。根据机制的不同,Importing 的类型可能会有所不同。以下是机制所需的一些常见 Importing。

  • 验证 ID 。执行身份验证的实体的身份。

  • 授权 ID 。如果身份验证成功,应该对其进行访问控制检查的实体的身份。

  • 认证凭证 。例如,密码或密钥。

如果程序(例如代理服务器)代表另一个实体进行身份验证,则身份验证和授权 ID 可能会有所不同。身份验证 ID 是使用Context.SECURITY_PRINCIPAL环境属性指定的。类型为java\.lang\.String

认证 ID 的密码/密钥是使用Context.SECURITY_CREDENTIALS环境属性指定的。它的类型为java\.lang\.Stringchar数组(char\[\])或byte数组(byte\[\])。如果密码是byte数组,则使用 UTF-8 编码将其转换为char数组。

如果已设置"java\.naming\.security\.sasl\.authorizationId"属性,则将其值用作授权 ID。它的值必须是java\.lang\.String类型。默认情况下,空字符串 用作授权 ID,它指示服务器从 Client 端的身份验证凭据派生授权 ID。

Digest-MD5 example显示了如何将Context\.SECURITY_PRINCIPALContext\.SECURITY_CREDENTIALS属性用于 Digest-MD5 身份验证。

如果某个机制要求 Importing 的内容已经描述过,那么您需要定义一个* callback *对象供该机制使用,您可以在JNDI Tutorial中查看回调示例。本类的下一部分讨论如何使用 SASL Digest-MD5 身份验证机制。 “ JNDI 教程”介绍了SASL PoliciesGSS API(Kerberos v5)CRAM-MD5机制。