此类定义了如何定位、加载和实例化 SASL 客户端和服务的策略。
例如,应用程序或库通过执行以下操作来获取 SASL 客户端:
然后它可以继续使用该实例来创建身份验证连接。SaslClient sc = Sasl.createSaslClient(mechanisms, authorizationId, protocol, serverName, props, callbackHandler);
同样,服务通过使用如下代码获取 SASL 服务:
SaslServer ss = Sasl.createSaslServer(mechanism, protocol, serverName, props, callbackHandler);
- 自从:
- 1.5
-
字段摘要
字段修饰符和类型Field描述static final String指定未绑定服务的绑定服务名称的属性名称。static final String指定要使用的凭据的属性的名称。static final String指定接收缓冲区最大大小的属性名称(以SaslClient/SaslServer的字节为单位)。static final String属性的名称,它指定是否需要在会话之间实现前向保密的机制。static final String属性的名称,指定是否不允许易受主动(非字典)攻击的机制。static final String指定是否不允许接受匿名登录的机制的属性名称。static final String属性的名称,它指定是否不允许易受被动字典攻击的机制。static final String属性的名称,它指定是否不允许易受简单的普通被动攻击的机制(例如,“PLAIN”)。static final String指定是否需要传递客户端凭据的机制的属性名称。static final String指定要使用的保护质量的属性的名称。static final String指定原始发送缓冲区最大大小的属性名称(以SaslClient/SaslServer的字节为单位)。static final String指定是否重用以前经过身份验证的会话信息的属性的名称。static final String指定服务是否必须向客户端进行身份验证的属性的名称。static final String指定要使用的密码强度的属性的名称。 -
方法总结
修饰符和类型方法描述static SaslClientcreateSaslClient(String[] mechanisms, String authorizationId, String protocol, String serverName, Map<String, ?> props, CallbackHandler cbh) 使用提供的参数创建SaslClient。static SaslServercreateSaslServer(String mechanism, String protocol, String serverName, Map<String, ?> props, CallbackHandler cbh) 为指定的机制创建一个SaslServer。static Enumeration<SaslClientFactory>获取生产SaslClient的已知工厂的枚举。static Enumeration<SaslServerFactory>获取生产SaslServer的已知工厂的枚举。
-
字段详细信息
-
QOP
指定要使用的保护质量的属性的名称。该属性包含客户端或服务愿意支持的以逗号分隔的有序保护质量值列表。 qop 值是其中之一"auth"- 仅身份验证"auth-int"- 身份验证加完整性保护"auth-conf"- 身份验证加上完整性和机密性保护
"auth"。该常量的值为"javax.security.sasl.qop"。- 参见:
-
STRENGTH
指定要使用的密码强度的属性的名称。该属性包含客户端或服务愿意支持的以逗号分隔的有序密码强度值列表。强度值是其中之一"low""medium""high"
如果此属性不存在,则默认强度为"high,medium,low"。此常量的值为"javax.security.sasl.strength"。- 参见:
-
SERVER_AUTH
指定服务是否必须向客户端进行身份验证的属性的名称。如果服务必须对客户端进行身份验证,则该属性包含"true";"false"否则。默认为"false"。
此常量值为"javax.security.sasl.server.authentication".- 参见:
-
BOUND_SERVER_NAME
指定未绑定服务的绑定服务名称的属性名称。通过将createSaslServer(java.lang.String, java.lang.String, java.lang.String, java.util.Map<java.lang.String, ?>, javax.security.auth.callback.CallbackHandler)中的serverName参数设置为空,将服务创建为未绑定服务。该属性包含身份验证交换完成后绑定的主机名。它仅在服务端可用。
此常量值为"javax.security.sasl.bound.server.name".- 参见:
-
MAX_BUFFER
指定接收缓冲区最大大小的属性名称(以SaslClient/SaslServer的字节为单位)。该属性包含整数的字符串表示形式。
如果此属性不存在,则默认大小由机制定义。
此常量值为"javax.security.sasl.maxbuffer".- 参见:
-
RAW_SEND_SIZE
指定原始发送缓冲区最大大小的属性名称(以SaslClient/SaslServer的字节为单位)。该属性包含整数的字符串表示形式。此属性的值是在身份验证交换期间在客户端和服务之间协商的。
此常量值为"javax.security.sasl.rawsendsize".- 参见:
-
REUSE
指定是否重用以前经过身份验证的会话信息的属性的名称。如果机制实现可能会尝试重用先前经过身份验证的会话信息,则该属性包含“true”;如果实现不得重用以前验证过的会话信息,则它包含“false”。设置为“true”仅作为提示:它不一定需要实际重用,因为重用可能由于多种原因而无法实现,包括但不限于缺乏重用机制支持、可重用信息过期,以及同行拒绝支持重用。该属性的默认值为“false”。此常量的值为“javax.security.sasl.reuse”。请注意,无论是否已提供此属性,都必须提供创建 SASL 客户端/服务实例所需的所有其他参数和属性。也就是说,您不能为了重用而提供任何更少的信息。支持重用的机制实现可能允许针对缓存大小、超时和可重用性标准等因素定制其实现。这种定制是依赖于实现的。- 参见:
-
POLICY_NOPLAINTEXT
属性的名称,它指定是否不允许易受简单的普通被动攻击的机制(例如,“PLAIN”)。如果不允许此类机制,则该属性包含"true";"false"如果允许此类机制。默认为"false"。
此常量值为"javax.security.sasl.policy.noplaintext".- 参见:
-
POLICY_NOACTIVE
属性的名称,指定是否不允许易受主动(非字典)攻击的机制。如果不允许使用易受主动攻击的机制,则该属性包含"true";"false"如果允许此类机制。默认为"false"。
此常量值为"javax.security.sasl.policy.noactive".- 参见:
-
POLICY_NODICTIONARY
属性的名称,它指定是否不允许易受被动字典攻击的机制。如果不允许易受字典攻击的机制,则该属性包含"true";"false"如果允许此类机制。默认为"false"。
此常量值为"javax.security.sasl.policy.nodictionary".- 参见:
-
POLICY_NOANONYMOUS
指定是否不允许接受匿名登录的机制的属性名称。如果不允许接受匿名登录的机制,则该属性包含"true";"false"如果允许此类机制。默认为"false"。
此常量值为"javax.security.sasl.policy.noanonymous".- 参见:
-
POLICY_FORWARD_SECRECY
属性的名称,它指定是否需要在会话之间实现前向保密的机制。前向保密意味着闯入一个会话不会自动提供用于闯入未来会话的信息。如果需要在会话之间实现前向保密的机制,则该属性包含"true";"false"如果不需要此类机制。默认为"false"。
此常量值为"javax.security.sasl.policy.forward".- 参见:
-
POLICY_PASS_CREDENTIALS
指定是否需要传递客户端凭据的机制的属性名称。如果需要传递客户端凭据的机制,则该属性包含"true";"false"如果不需要此类机制。默认为"false"。
此常量值为"javax.security.sasl.policy.credentials".- 参见:
-
CREDENTIALS
指定要使用的凭据的属性的名称。该属性包含特定于机制的 Java 凭证对象。机制实现可能会检查此属性的值以确定它是否是它们支持的类。该属性可用于向支持委托身份验证的机制提供凭证。
此常量值为"javax.security.sasl.credentials".- 参见:
-
-
方法详情
-
createSaslClient
public static SaslClient createSaslClient(String [] mechanisms, String authorizationId, String protocol, String serverName, Map <String , ?> props, CallbackHandler cbh) throws SaslException使用提供的参数创建SaslClient。此方法使用 JCA 安全提供者框架 ,如“Java 密码体系结构 (JCA) 参考指南”中所述,用于定位和选择SaslClient实现。首先,它从为“SaslClientFactory”服务和指定的 SASL 机制注册的安全提供者那里获得一个有序的SaslClientFactory实例列表。然后它会在列表中的每个工厂实例上调用createSaslClient(),直到其中一个产生非空的SaslClient实例。它返回非空SaslClient实例,如果搜索未能生成非空SaslClient实例,则返回空值。SaslClientFactory 的安全提供程序使用以下形式的 JCA 安全提供程序框架密钥注册
SaslClientFactory.mechanism_name
和值是javax.security.sasl.SaslClientFactory实现的类名。例如,包含支持“DIGEST-MD5”机制的工厂类com.wiz.sasl.digest.ClientFactory的提供程序将向 JCA 注册以下条目:SaslClientFactory.DIGEST-MD5 com.wiz.sasl.digest.ClientFactory有关如何安装和配置安全服务提供程序的信息,请参阅“Java 密码体系结构 API 规范和参考”。
- 实现注意事项:
-
JDK 参考实现还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()返回的提供商顺序不同。如果
jdk.sasl.disabledMechanisms安全属性中列出了一种机制,它将被忽略并且不会被协商。 - 参数:
mechanisms- 要尝试的机制名称的非空列表。每个都是 SASL 机制的 IANA 注册名称。 (例如“GSSAPI”、“CRAM-MD5”)。authorizationId- 可能为空的协议相关标识,用于授权。如果为 null 或为空,则服务从客户端的身份验证凭证中派生授权 ID。当 SASL 身份验证成功完成时,指定的实体将被授予访问权限。protocol- 正在执行身份验证的协议的非空字符串名称(例如,“ldap”)。serverName- 要对其进行身份验证的服务的非空完全限定主机名。props- 可能为空的属性集,用于选择 SASL 机制和配置所选机制的身份验证交换。例如,如果props包含值为"true"的Sasl.POLICY_NOPLAINTEXT属性,则所选的 SASL 机制必须不易受到简单的普通被动攻击。除了此类中声明的标准属性外,还可以包括其他可能特定于机制的属性。与所选机制无关的属性将被忽略,包括任何具有非字符串键的映射条目。cbh- SASL 机制使用的可能为 null 的回调处理程序,以从应用程序/库获取更多信息以完成身份验证。例如,SASL 机制可能需要来自调用方的身份验证 ID、密码和领域。使用NameCallback请求身份验证 ID。使用PasswordCallback请求密码。如果有可供选择的领域列表,则使用RealmChoiceCallback请求领域,如果必须输入领域,则使用RealmCallback请求领域。- 返回:
-
使用提供的参数创建的可能为空的
SaslClient。如果为空,则找不到将生成一个的SaslClientFactory。 - 抛出:
SaslException- 如果由于错误而无法创建SaslClient。
-
createSaslServer
public static SaslServer createSaslServer(String mechanism, String protocol, String serverName, Map <String , ?> props, CallbackHandler cbh) throws SaslException为指定的机制创建一个SaslServer。此方法使用“Java 密码体系结构 (JCA) 参考指南”中描述的 JCA 安全提供者框架 来定位和选择SaslClient实现。首先,它从为“SaslServerFactory”服务和指定机制注册的安全提供者处获取SaslServerFactory实例的有序列表。然后它会在列表中的每个工厂实例上调用createSaslServer(),直到其中一个产生非空的SaslServer实例。它返回非空SaslServer实例,如果搜索未能生成非空SaslServer实例,则返回 null。SaslServerFactory 的安全提供程序使用以下形式的 JCA 安全提供程序框架密钥注册
SaslServerFactory.mechanism_name
和值是javax.security.sasl.SaslServerFactory实现的类名。例如,包含支持“DIGEST-MD5”机制的工厂类com.wiz.sasl.digest.ServerFactory的提供程序将向 JCA 注册以下条目:SaslServerFactory.DIGEST-MD5 com.wiz.sasl.digest.ServerFactory有关如何安装和配置安全服务提供程序的信息,请参阅“Java 密码体系结构 API 规范和参考”。
- 实现注意事项:
-
JDK 参考实现还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()返回的提供商顺序不同。如果
mechanism列在jdk.sasl.disabledMechanisms安全属性中,它将被忽略并且此方法返回null。 - 参数:
mechanism- 非空机制名称。它必须是 SASL 机制的 IANA 注册名称。 (例如“GSSAPI”、“CRAM-MD5”)。protocol- 正在执行身份验证的协议的非空字符串名称(例如,“ldap”)。serverName- 服务的完全限定主机名,如果服务未绑定到任何特定主机名,则为 null。如果该机制不允许未绑定的服务,则会抛出SaslException。props- 可能为空的属性集,用于选择 SASL 机制和配置所选机制的身份验证交换。例如,如果props包含值为"true"的Sasl.POLICY_NOPLAINTEXT属性,则所选的 SASL 机制必须不易受到简单的普通被动攻击。除了此类中声明的标准属性外,还可以包括其他可能特定于机制的属性。与所选机制无关的属性将被忽略,包括任何具有非字符串键的映射条目。cbh- SASL 机制使用的可能为 null 的回调处理程序,以从应用程序/库获取更多信息以完成身份验证。例如,SASL 机制可能需要来自调用方的身份验证 ID、密码和领域。使用NameCallback请求身份验证 ID。使用PasswordCallback请求密码。如果有可供选择的领域列表,则使用RealmChoiceCallback请求领域,如果必须输入领域,则使用RealmCallback请求领域。- 返回:
-
使用提供的参数创建的可能为空的
SaslServer。如果为空,则找不到将生成一个的SaslServerFactory。 - 抛出:
SaslException- 如果由于错误而无法创建SaslServer。
-
getSaslClientFactories
获取生产SaslClient的已知工厂的枚举。此方法使用与createSaslClient()相同的算法来定位工厂。- 返回:
-
生产
SaslClient的已知工厂的非空枚举。 - 参见:
-
getSaslServerFactories
获取生产SaslServer的已知工厂的枚举。此方法使用与createSaslServer()相同的算法来定位工厂。- 返回:
-
生产
SaslServer的已知工厂的非空枚举。 - 参见:
-