java.applet

java.awt

java.awt.color

java.awt.datatransfer

java.awt.dnd

java.awt.event

java.awt.font

java.awt.geom

java.awt.im

java.awt.im.spi

java.awt.image

java.awt.image.renderable

java.awt.print

java.beans

java.beans.beancontext

java.io

java.lang

java.lang.annotation

java.lang.instrument

java.lang.management

java.lang.ref

java.lang.reflect

java.math

java.net

java.nio

java.nio.channels

java.nio.channels.spi

java.nio.charset

java.nio.charset.spi

java.rmi

java.rmi.activation

java.rmi.dgc

java.rmi.registry

java.rmi.server

java.security

java.security.acl

java.security.cert

java.security.interfaces

java.security.spec

java.sql

java.text

java.util

java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

javax.accessibility

javax.activity

javax.crypto

javax.crypto.interfaces

javax.crypto.spec

javax.imageio

javax.imageio.event

javax.imageio.metadata

javax.imageio.plugins.bmp

javax.imageio.plugins.jpeg

javax.imageio.spi

javax.imageio.stream

javax.management

javax.management.loading

javax.management.modelmbean

javax.management.monitor

javax.management.openmbean

javax.management.relation

javax.management.remote

javax.management.remote.rmi

javax.management.timer

javax.naming

javax.naming.directory

javax.naming.event

javax.naming.ldap

javax.naming.spi

javax.net

javax.net.ssl

javax.print

javax.print.attribute

javax.print.attribute.standard

javax.print.event

javax.rmi

javax.rmi.CORBA

javax.rmi.ssl

javax.security.auth

javax.security.auth.callback

javax.security.auth.kerberos

javax.security.auth.login

javax.security.auth.spi

javax.security.auth.x500

javax.security.cert

javax.security.sasl

javax.sound.midi

javax.sound.midi.spi

javax.sound.sampled

javax.sound.sampled.spi

javax.sql

javax.sql.rowset

javax.sql.rowset.serial

javax.sql.rowset.spi

javax.swing

javax.swing.border

javax.swing.colorchooser

javax.swing.event

javax.swing.filechooser

javax.swing.plaf

javax.swing.plaf.basic

javax.swing.plaf.metal

javax.swing.plaf.multi

javax.swing.plaf.synth

javax.swing.table

javax.swing.text

javax.swing.text

javax.swing.text.parser

javax.swing.text.rtf

javax.swing.tree

javax.swing.undo

javax.transaction

javax.transaction.xa

javax.xml

javax.xml.datatype

javax.xml.namespace

javax.xml.parsers

javax.xml.transform

javax.xml.transform.dom

javax.xml.transform.sax

javax.xml.transform.stream

javax.xml.validation

javax.xml.xpath

org.ietf.jgss

org.omg.CORBA

org.omg.CORBA_2_3

org.omg.CORBA_2_3.portable

org.omg.CORBA.DynAnyPackage

org.omg.CORBA.ORBPackage

org.omg.CORBA.portable

org.omg.CORBA.TypeCodePackage

org.omg.CosNaming

org.omg.CosNaming.NamingContextExtPackage

org.omg.CosNaming.NamingContextPackage

org.omg.Dynamic

org.omg.DynamicAny

org.omg.DynamicAny.DynAnyFactoryPackage

org.omg.DynamicAny.DynAnyPackage

org.omg.IOP

org.omg.IOP.CodecFactoryPackage

org.omg.IOP.CodecPackage

org.omg.Messaging

org.omg.PortableInterceptor

org.omg.PortableInterceptor.ORBInitInfoPackage

org.omg.PortableServer

org.omg.PortableServer.CurrentPackage

org.omg.PortableServer.POAManagerPackage

org.omg.PortableServer.POAPackage

org.omg.PortableServer.portable

org.omg.PortableServer.ServantLocatorPackage

org.omg.SendingContext

org.omg.stub.java.rmi

org.w3c.dom

org.w3c.dom.bootstrap

org.w3c.dom.events

org.w3c.dom.ls

org.xml.sax

org.xml.sax.ext

org.xml.sax.helpers

allclasses-frame

allclasses-noframe

constant-values

deprecated-list

help-doc

JavaTM 2 Platform
Standard Ed. 5.0

javax.security.sasl
接口 SaslServer


public interface SaslServer

以服务器的身份执行 SASL 身份验证。

为了执行具体 SASL 机制所定义的身份验证,服务器(例如 LDAP 服务器)要获得此类的一个实例。调用 SaslServer 实例上的方法可生成与 SaslServer 所实现的 SASL 机制相对应的 challenge。随着身份验证的进行,该实例会封装 SASL 服务器的身份验证交换状态。

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

 SaslServer ss = Sasl.createSaslServer(mechanism,
     "ldap", myFQDN, props, callbackHandler);
然后可继续为身份验证使用该服务器。例如,假设 LDAP 服务器接收到一个 LDAP BIND 请求,其中包含 SASL 机制的名称和(可选的)初始响应。然后它可按如下方式使用服务器:
 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
另请参见:
Sasl, SaslServerFactory

方法摘要
 void dispose()
          处置 SaslServer 可能使用的所有系统资源或安全敏感信息。
 byte[] evaluateResponse(byte[] response)
          评估响应数据并生成一个 challenge。
 String getAuthorizationID()
          报告此会话客户端的有效授权 ID。
 String getMechanismName()
          返回此 SASL 服务器的 IANA 注册机制名。
 Object getNegotiatedProperty(String propName)
          检索已协商的属性。
 boolean isComplete()
          确定身份验证交换是否已完成。
 byte[] unwrap(byte[] incoming, int offset, int len)
          解包接收自客户端的 byte 数组。
 byte[] wrap(byte[] outgoing, int offset, int len)
          包装要发送到客户端的 byte 数组。
 

方法详细信息

getMechanismName

String getMechanismName()
返回此 SASL 服务器的 IANA 注册机制名。(例如 "CRAM-MD5"、"GSSAPI")。

返回:
表示 IANA 注册机制名的非 null 字符串。

evaluateResponse

byte[] evaluateResponse(byte[] response)
                        throws SaslException
评估响应数据并生成一个 challenge。 如果在身份验证处理期间接收到客户端的响应,则调用此方法来准备要提交给客户端的下一个合适 challenge。如果身份验证已成功并且没有其他 challenge 数据要发送给客户端,则 challenge 为 null。如果必须通过向客户端发送 challenge 来继续进行身份验证,或者如果身份验证已成功但客户端需要处理 challenge 数据,则 challenge 是非 null 的。每次调用 evaluateResponse() 后都应该调用 isComplete() 来确定是否还需要客户端的进一步响应。

参数:
response - 客户端发送的非 null(但可能为空)响应。
返回:
要发送给客户端的 challenge,可能为 null。如果身份验证已成功并且没有其他 challenge 数据要发送给客户端,则 challenge 为 null。
抛出:
SaslException - 如果处理响应或生成 challenge 时发生错误。

isComplete

boolean isComplete()
确定身份验证交换是否已完成。通常在每次调用 evaluateResponse() 后调用此方法来确定身份验证是否已成功完成,还是应该继续进行。

返回:
如果身份验证交换已完成,则返回 true;否则返回 false。

getAuthorizationID

String getAuthorizationID()
报告此会话客户端的有效授权 ID。仅在 isComplete() 返回 true 时才可调用此方法。

返回:
客户端的授权 ID。
抛出:
IllegalStateException - 如果未完成此次身份验证会话

unwrap

byte[] unwrap(byte[] incoming,
              int offset,
              int len)
              throws SaslException
解包接收自客户端的 byte 数组。仅在身份验证交换已完成(即 isComplete() 返回 true)后,并且仅在身份验证交换已经协商将完整性和/或机密性作为保护性质时才调用此方法;否则会抛出 IllegalStateException

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

参数:
incoming - 非 null 的 byte 数组,包含取自客户端的已编码字节。
offset - 所用字节在 incoming 中的开始位置。
len - 使用 incoming 中的字节数。
返回:
包含已解码字节的非 null byte 数组。
抛出:
SaslException - 如果无法成功解包 incoming
IllegalStateException - 如果身份验证交换未完成,如果协商的保护性质既没有完整性,也没有机密性

wrap

byte[] wrap(byte[] outgoing,
            int offset,
            int len)
            throws SaslException
包装要发送到客户端的 byte 数组。仅在身份验证交换已完成(即 isComplete() 返回 true)后,并且仅在身份验证交换已经协商将完整性和/或机密性作为保护性质时才调用此方法;否则会抛出 SaslException

此方法的结果会组成 SASL 缓冲区的内容(在 RFC 2222 中定义),没有表示长度的前导 4 个八位组字段。offsetlen 指定了要使用的 outgoing 部分。

参数:
outgoing - 非 null 的 byte 数组,包含要编码的字节。
offset - 所用字节在 outgoing 中的开始位置。
len - 使用 outgoing 中的字节数。
返回:
包含已编码字节的非 null byte 数组。
抛出:
SaslException - 如果无法成功包装 outgoing
IllegalStateException - 如果身份验证交换未完成,如果协商的保护性质既没有完整性,也没有机密性。

getNegotiatedProperty

Object getNegotiatedProperty(String propName)
检索已协商的属性。仅在身份验证交换已完成后(即当 isComplete() 返回 true)才调用此方法;否则会抛出 IllegalStateException

参数:
propName - 属性
返回:
已协商属性的值。如果为 null,则未协商该属性,或者该属性不适用于此机制。
抛出:
IllegalStateException - 如果未完成此身份验证交换

dispose

void dispose()
             throws SaslException
处置 SaslServer 可能使用的所有系统资源或安全敏感信息。调用此方法会使 SaslServer 实例失效。此方法是幂等的。

抛出:
SaslException - 如果释放资源时遇到问题。

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策