软件包  javax.security.sasl

Interface SaslServer


  • public interface SaslServer
    执行SASL身份验证作为服务器。

    服务器(例如LDAP服务器)获取此类的实例,以便执行由特定SASL机制定义的身份验证。 根据SaslServer实施的SASL机制,在SaslServer实例上调用方法会产生挑战。 随着身份验证的进行,实例会封装SASL服务器的身份验证交换。

    以下是LDAP服务器如何使用SaslServer 它首先获得客户端请求的SASL机制的SaslServer的实例:

     SaslServer ss = Sasl.createSaslServer(mechanism,
         "ldap", myFQDN, props, callbackHandler);
    
    然后,它可以继续使用服务器进行身份验证。 例如,假设LDAP服务器收到包含SASL机制名称和(可选)初始响应的LDAP BIND请求。 然后它可能使用服务器如下:
    
     while (!ss.isComplete()) {
         try {
             byte[] challenge = ss.evaluateResponse(response);
             if (ss.isComplete()) {
                 status = ldap.sendBindResponse(mechanism, challenge, SUCCESS);
             } else {
                 status = ldap.sendBindResponse(mechanism, challenge,
                       SASL_BIND_IN_PROGRESS);
                 response = ldap.readBindRequest();
             }
         } catch (SaslException e) {
              status = ldap.sendErrorResponse(e);
              break;
         }
     }
     if (ss.isComplete() && status == SUCCESS) {
        String qop = (String) sc.getNegotiatedProperty(Sasl.QOP);
        if (qop != null
            && (qop.equalsIgnoreCase("auth-int")
                || qop.equalsIgnoreCase("auth-conf"))) {
    
          // Use SaslServer.wrap() and SaslServer.unwrap() for future
          // communication with client
          ldap.in = new SecureInputStream(ss, ldap.in);
          ldap.out = new SecureOutputStream(ss, ldap.out);
        }
     }
    
    从以下版本开始:
    1.5
    另请参见:
    SaslSaslServerFactory
    • 方法摘要

      所有方法  实例方法 抽象方法 
      变量和类型 方法 描述
      void dispose()
      处置SaslServer可能正在使用的任何系统资源或安全敏感信息。
      byte[] evaluateResponse​(byte[] response)
      评估响应数据并生成挑战。
      String getAuthorizationID()
      报告对此会话的客户端有效的授权标识。
      String getMechanismName()
      返回此SASL服务器的IANA注册机制名称。
      Object getNegotiatedProperty​(String propName)
      检索协商的属性。
      boolean isComplete()
      确定身份验证交换是否已完成。
      byte[] unwrap​(byte[] incoming, int offset, int len)
      展开从客户端接收的字节数组。
      byte[] wrap​(byte[] outgoing, int offset, int len)
      包装要发送到客户端的字节数组。
    • 方法详细信息

      • getMechanismName

        String getMechanismName()
        返回此SASL服务器的IANA注册机制名称。 (例如“CRAM-MD5”,“GSSAPI”)。
        结果
        表示IANA注册的机制名称的非空字符串。
      • evaluateResponse

        byte[] evaluateResponse​(byte[] response)
                         throws SaslException
        评估响应数据并生成挑战。 如果在认证过程中从客户端收到响应,则调用此方法以准备适当的下一个挑战以提交给客户端。 如果身份验证成功并且不再将质询数据发送到客户端,则质询为空。 如果必须通过向客户端发送质询来继续身份验证,或者身份验证成功但需要由客户端处理质询数据,则它为非null。 isComplete()应该每次调用之后调用evaluateResponse() ,以确定是否从所述客户端所需要的任何进一步的反应。
        参数
        response - 客户端发送的非空(但可能为空)响应。
        结果
        发送给客户端的可能为空的挑战。 如果身份验证成功并且没有更多挑战数据要发送到客户端,则为null。
        异常
        SaslException - 如果在处理响应或生成质询时发生错误。
      • isComplete

        boolean isComplete()
        确定身份验证交换是否已完成。 通常在每次调用evaluateResponse()之后调用此方法,以确定身份验证是成功完成还是应继续。
        结果
        如果身份验证交换已完成,则为true; 否则是假的。
      • getAuthorizationID

        String getAuthorizationID()
        报告对此会话的客户端有效的授权标识。 只有isComplete()返回true时才能调用此方法。
        结果
        客户端的授权标识。
        异常
        IllegalStateException - 如果此验证会话尚未完成
      • unwrap

        byte[] unwrap​(byte[] incoming,
                      int offset,
                      int len)
               throws SaslException
        展开从客户端接收的字节数组。 只有在身份验证交换完成后(即,当isComplete()返回true时)才能调用此方法,并且只有在身份验证交换已协商完整性和/或隐私作为保护质量的情况下才能调用此方法; 否则,抛出IllegalStateException

        incoming是RFC 2222中定义的SASL缓冲区的内容,没有表示长度的前导四个八位字节字段。 offsetlen指定要使用的部分incoming

        参数
        incoming - 包含来自客户端的编码字节的非null字节数组。
        offset - 要使用的字节的起始位置 incoming
        len - 要使用的字节数 incoming
        结果
        包含解码字节的非空字节数组。
        异常
        SaslException - 如果 incoming无法成功解包。
        IllegalStateException - 如果验证交换尚未完成,或者协商的保护质量既不完整也不隐私
      • wrap

        byte[] wrap​(byte[] outgoing,
                    int offset,
                    int len)
             throws SaslException
        包装要发送到客户端的字节数组。 只有在认证交换完成后(即isComplete()返回true时)才能调用此方法,并且只有在认证交换协议已将协议完整性和/或隐私作为保护质量时isComplete() ; 否则,抛出SaslException

        此方法的结果将构成RFC 2222中定义的SASL缓冲区的内容,而不包含表示长度的前导四个八位字节字段。 offsetlen指定要使用的部分outgoing

        参数
        outgoing - 包含要编码的字节的非null字节数组。
        offset - 要使用的字节的起始位置 outgoing
        len - 要使用的字节数 outgoing
        结果
        包含编码字节的非null字节数组。
        异常
        SaslException - 如果 outgoing无法成功包装。
        IllegalStateException - 如果验证交换尚未完成,或者协商的保护质量既没有完整性也没有隐私。
      • getNegotiatedProperty

        Object getNegotiatedProperty​(String propName)
        检索协商的属性。 只有在认证交换完成后才会调用此方法(即isComplete()返回true时); 否则,抛出IllegalStateException

        Sasl类包含几个众所周知的属性名称(例如, Sasl.QOP )。 SASL提供程序可以支持特定于供应商和/或机制的其他属性。

        参数
        propName - 该物业
        结果
        谈判财产的价值。 如果为null,则不会协商该属性或不适用于此机制。
        异常
        IllegalStateException - 如果此验证交换尚未完成
      • dispose

        void dispose()
              throws SaslException
        处置SaslServer可能正在使用的任何系统资源或安全敏感信息。 调用此方法会使SaslServer实例无效。 这种方法是幂等的。
        异常
        SaslException - 如果在处置资源时遇到问题。