SASL
LDAP v3 协议使用SASL支持* pluggable *身份验证。这意味着 LDAPClient 端和服务器可以配置为协商和使用可能的非标准和/或自定义机制进行身份验证,具体取决于 Client 端和服务器所需的保护级别。 LDAP v2 协议不支持 SASL。
当前定义了几种 SASL 机制:
-
匿名(RFC 2245)
-
CRAM-MD5(RFC 2195)
-
摘要 MD5(RFC 2831)
-
外部(RFC 2222)
-
Kerberos V4(RFC 2222)
-
Kerberos V5(RFC 2222)
-
SecurID(RFC 2808)
-
S /键(RFC 2222)
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\.String
,char
数组(char\[\]
)或byte
数组(byte\[\]
)。如果密码是byte
数组,则使用 UTF-8 编码将其转换为char
数组。
如果已设置"java\.naming\.security\.sasl\.authorizationId"
属性,则将其值用作授权 ID。它的值必须是java\.lang\.String
类型。默认情况下,空字符串 用作授权 ID,它指示服务器从 Client 端的身份验证凭据派生授权 ID。
Digest-MD5 example显示了如何将Context\.SECURITY_PRINCIPAL
和Context\.SECURITY_CREDENTIALS
属性用于 Digest-MD5 身份验证。
如果某个机制要求 Importing 的内容已经描述过,那么您需要定义一个* callback *对象供该机制使用,您可以在JNDI Tutorial中查看回调示例。本类的下一部分讨论如何使用 SASL Digest-MD5 身份验证机制。 “ JNDI 教程”介绍了SASL Policies,GSS API(Kerberos v5)和CRAM-MD5机制。