此类定义了如何定位、加载和实例化SASL客户端和服务器的策略。
例如,应用程序或库可以通过以下方式获取SASL客户端:
然后可以使用该实例创建身份验证连接。SaslClient sc = Sasl.createSaslClient(mechanisms, authorizationId, protocol, serverName, props, callbackHandler);
类似地,服务器可以通过以下代码获取SASL服务器:
SaslServer ss = Sasl.createSaslServer(mechanism, protocol, serverName, props, callbackHandler);
- 自 JDK 版本:
- 1.5
-
Field Summary
Modifier and TypeFieldDescriptionstatic 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
指定要使用的密码强度的属性名称。 -
Method Summary
Modifier and TypeMethodDescriptionstatic SaslClient
createSaslClient
(String[] mechanisms, String authorizationId, String protocol, String serverName, Map<String, ?> props, CallbackHandler cbh) 使用提供的参数创建SaslClient
。static SaslServer
createSaslServer
(String mechanism, String protocol, String serverName, Map<String, ?> props, CallbackHandler cbh) 为指定的机制创建SaslServer
。static Enumeration
<SaslClientFactory> 获取用于生成SaslClient
的已知工厂的枚举。static Enumeration
<SaslServerFactory> 获取用于生成SaslServer
的已知工厂的枚举。
-
Field Details
-
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
参数设置为 null,可以将服务器创建为未绑定服务器。该属性在身份验证交换完成后包含绑定主机名。仅在服务器端可用。
此常量的值为"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"
。- 参见:
-
-
Method Details
-
createSaslClient
public static SaslClient createSaslClient(String[] mechanisms, String authorizationId, String protocol, String serverName, Map<String, ?> props, CallbackHandler cbh) throws SaslException使用提供的参数创建一个SaslClient
。此方法使用“Java加密体系结构(JCA)参考指南”中描述的“JCA安全提供程序框架”来定位和选择SaslClient
实现。首先,它从已注册的安全提供程序中获取“SaslClientFactory”服务和指定的SASL机制的有序SaslClientFactory
实例列表。然后,在列表中的每个工厂实例上调用createSaslClient()
,直到找到一个产生非空SaslClient
实例为止。它返回非空的SaslClient
实例,如果搜索未能产生非空的SaslClient
实例,则返回null。用于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.preferred
Security
属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()
返回的提供程序顺序不同。如果机制在
jdk.sasl.disabledMechanisms
安全属性中列出,则将被忽略并且不会被协商。 - 参数:
-
mechanisms
- 要尝试的机制名称的非空列表。每个都是SASL机制的IANA注册名称(例如“GSSAPI”,“CRAM-MD5”)。 -
authorizationId
- 用于授权的可能为空的协议相关标识。如果为null或空,则服务器从客户端的身份验证凭据派生授权ID。当SASL身份验证成功完成时,授予指定实体访问权限。 -
protocol
- 正在执行身份验证的协议的非空字符串名称(例如“ldap”)。 -
serverName
- 要进行身份验证的服务器的非空完全限定主机名。 -
props
- 用于选择SASL机制并配置所选机制的身份验证交换的可能为空属性集。例如,如果props
包含Sasl.POLICY_NOPLAINTEXT
属性,其值为"true"
,则所选的SASL机制必须不容易受到简单明文被动攻击。除了此类中声明的标准属性外,还可以包括其他可能是机制特定的属性。与所选机制无关的属性将被忽略,包括任何具有非String键的映射条目。 -
cbh
- 用于SASL机制从应用程序/库中获取进一步信息以完成身份验证的可能为空回调处理程序。例如,SASL机制可能需要调用者的身份验证ID、密码和领域。通过使用NameCallback
请求身份验证ID。通过使用PasswordCallback
请求密码。如果有要选择的领域列表,则通过使用RealmChoiceCallback
请求领域,如果必须输入领域,则通过使用RealmCallback
请求领域。 - 返回:
-
使用提供的参数创建的可能为空的
SaslClient
。如果为null,则找不到会产生一个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.preferred
Security
属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()
返回的提供程序顺序不同。如果
mechanism
在jdk.sasl.disabledMechanisms
安全属性中列出,则将被忽略并且此方法返回null
。 - 参数:
-
mechanism
- 非空的机制名称。必须是SASL机制的IANA注册名称(例如“GSSAPI”,“CRAM-MD5”)。 -
protocol
- 正在执行身份验证的协议的非空字符串名称(例如“ldap”)。 -
serverName
- 服务器的完全限定主机名,如果服务器未绑定到任何特定主机名,则为null。如果机制不允许未绑定服务器,则将抛出SaslException
。 -
props
- 用于选择SASL机制并配置所选机制的身份验证交换的可能为空属性集。例如,如果props
包含Sasl.POLICY_NOPLAINTEXT
属性,其值为"true"
,则所选的SASL机制必须不容易受到简单明文被动攻击。除了此类中声明的标准属性外,还可以包括其他可能是机制特定的属性。与所选机制无关的属性将被忽略,包括任何具有非String键的映射条目。 -
cbh
- 用于SASL机制从应用程序/库中获取进一步信息以完成身份验证的可能为空回调处理程序。例如,SASL机制可能需要调用者的身份验证ID、密码和领域。通过使用NameCallback
请求身份验证ID。通过使用PasswordCallback
请求密码。如果有要选择的领域列表,则通过使用RealmChoiceCallback
请求领域,如果必须输入领域,则通过使用RealmCallback
请求领域。 - 返回:
-
使用提供的参数创建的可能为空的
SaslServer
。如果为null,则找不到会产生一个SaslServer
的SaslServerFactory
。 - 抛出:
-
SaslException
- 由于错误无法创建SaslServer
。
-
getSaslClientFactories
获取用于生成SaslClient
的已知工厂的枚举。此方法使用与createSaslClient()
相同的算法来定位工厂。- 返回:
-
一个非空的已知工厂枚举,用于生成
SaslClient
。 - 参见:
-
getSaslServerFactories
获取一个已知工厂枚举,用于生成SaslServer
。此方法使用与createSaslServer()
相同的算法来定位工厂。- 返回:
-
一个非空的已知工厂枚举,用于生成
SaslServer
。 - 参见:
-