类 Sasl

java.lang.Object
javax.security.sasl.Sasl

public class Sasl extends Object
用于创建 SASL 客户端和服务的静态类。

此类定义了如何定位、加载和实例化 SASL 客户端和服务的策略。

例如,应用程序或库通过执行以下操作来获取 SASL 客户端:

 SaslClient sc = Sasl.createSaslClient(mechanisms,
   authorizationId, protocol, serverName, props, callbackHandler);
然后它可以继续使用该实例来创建身份验证连接。

同样,服务通过使用如下代码获取 SASL 服务:

 SaslServer ss = Sasl.createSaslServer(mechanism,
   protocol, serverName, props, callbackHandler);
自从:
1.5
  • 字段详细信息

    • QOP

      public static final String  QOP
      指定要使用的保护质量的属性的名称。该属性包含客户端或服务愿意支持的以逗号分隔的有序保护质量值列表。 qop 值是其中之一
      • "auth" - 仅身份验证
      • "auth-int" - 身份验证加完整性保护
      • "auth-conf" - 身份验证加上完整性和机密性保护
      列表的顺序指定客户端或服务的优先顺序。如果此属性不存在,则默认 qop 为 "auth" 。该常量的值为 "javax.security.sasl.qop"
      参见:
    • STRENGTH

      public static final String  STRENGTH
      指定要使用的密码强度的属性的名称。该属性包含客户端或服务愿意支持的以逗号分隔的有序密码强度值列表。强度值是其中之一
      • "low"
      • "medium"
      • "high"
      列表的顺序指定客户端或服务的优先顺序。一个实现应该允许配置这些值的含义。应用程序可以使用具有 JCE 感知机制的 Java 密码术扩展 (JCE) 来控制与强度值匹配的密码套件的选择。
      如果此属性不存在,则默认强度为 "high,medium,low" 。此常量的值为 "javax.security.sasl.strength"
      参见:
    • SERVER_AUTH

      public static final String  SERVER_AUTH
      指定服务是否必须向客户端进行身份验证的属性的名称。如果服务必须对客户端进行身份验证,则该属性包含 "true""false"否则。默认为 "false"
      此常量值为 "javax.security.sasl.server.authentication".
      参见:
    • BOUND_SERVER_NAME

      public static final String  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

      public static final String  MAX_BUFFER
      指定接收缓冲区最大大小的属性名称(以 SaslClient /SaslServer 的字节为单位)。该属性包含整数的字符串表示形式。
      如果此属性不存在,则默认大小由机制定义。
      此常量值为 "javax.security.sasl.maxbuffer".
      参见:
    • RAW_SEND_SIZE

      public static final String  RAW_SEND_SIZE
      指定原始发送缓冲区最大大小的属性名称(以 SaslClient /SaslServer 的字节为单位)。该属性包含整数的字符串表示形式。此属性的值是在身份验证交换期间在客户端和服务之间协商的。
      此常量值为 "javax.security.sasl.rawsendsize".
      参见:
    • REUSE

      public static final String  REUSE
      指定是否重用以前经过身份验证的会话信息的属性的名称。如果机制实现可能会尝试重用先前经过身份验证的会话信息,则该属性包含“true”;如果实现不得重用以前验证过的会话信息,则它包含“false”。设置为“true”仅作为提示:它不一定需要实际重用,因为重用可能由于多种原因而无法实现,包括但不限于缺乏重用机制支持、可重用信息过期,以及同行拒绝支持重用。该属性的默认值为“false”。此常量的值为“javax.security.sasl.reuse”。请注意,无论是否已提供此属性,都必须提供创建 SASL 客户端/服务实例所需的所有其他参数和属性。也就是说,您不能为了重用而提供任何更少的信息。支持重用的机制实现可能允许针对缓存大小、超时和可重用性标准等因素定制其实现。这种定制是依赖于实现的。
      参见:
    • POLICY_NOPLAINTEXT

      public static final String  POLICY_NOPLAINTEXT
      属性的名称,它指定是否不允许易受简单的普通被动攻击的机制(例如,“PLAIN”)。如果不允许此类机制,则该属性包含 "true""false" 如果允许此类机制。默认为 "false"
      此常量值为 "javax.security.sasl.policy.noplaintext".
      参见:
    • POLICY_NOACTIVE

      public static final String  POLICY_NOACTIVE
      属性的名称,指定是否不允许易受主动(非字典)攻击的机制。如果不允许使用易受主动攻击的机制,则该属性包含 "true""false" 如果允许此类机制。默认为 "false"
      此常量值为 "javax.security.sasl.policy.noactive".
      参见:
    • POLICY_NODICTIONARY

      public static final String  POLICY_NODICTIONARY
      属性的名称,它指定是否不允许易受被动字典攻击的机制。如果不允许易受字典攻击的机制,则该属性包含 "true""false" 如果允许此类机制。默认为 "false"
      此常量值为 "javax.security.sasl.policy.nodictionary".
      参见:
    • POLICY_NOANONYMOUS

      public static final String  POLICY_NOANONYMOUS
      指定是否不允许接受匿名登录的机制的属性名称。如果不允许接受匿名登录的机制,则该属性包含 "true""false" 如果允许此类机制。默认为 "false"
      此常量值为 "javax.security.sasl.policy.noanonymous".
      参见:
    • POLICY_FORWARD_SECRECY

      public static final String  POLICY_FORWARD_SECRECY
      属性的名称,它指定是否需要在会话之间实现前向保密的机制。前向保密意味着闯入一个会话不会自动提供用于闯入未来会话的信息。如果需要在会话之间实现前向保密的机制,则该属性包含 "true""false" 如果不需要此类机制。默认为 "false"
      此常量值为 "javax.security.sasl.policy.forward".
      参见:
    • POLICY_PASS_CREDENTIALS

      public static final String  POLICY_PASS_CREDENTIALS
      指定是否需要传递客户端凭据的机制的属性名称。如果需要传递客户端凭据的机制,则该属性包含 "true""false" 如果不需要此类机制。默认为 "false"
      此常量值为 "javax.security.sasl.policy.credentials".
      参见:
    • CREDENTIALS

      public static final String  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.preferred Security 属性来确定指定算法的首选提供程序顺序。这可能与 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.preferred Security 属性来确定指定算法的首选提供程序顺序。这可能与 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

      public static Enumeration <SaslClientFactory > getSaslClientFactories()
      获取生产 SaslClient 的已知工厂的枚举。此方法使用与 createSaslClient() 相同的算法来定位工厂。
      返回:
      生产 SaslClient 的已知工厂的非空枚举。
      参见:
    • getSaslServerFactories

      public static Enumeration <SaslServerFactory > getSaslServerFactories()
      获取生产 SaslServer 的已知工厂的枚举。此方法使用与 createSaslServer() 相同的算法来定位工厂。
      返回:
      生产 SaslServer 的已知工厂的非空枚举。
      参见: