SPNEGO(SPNEGO: Simple and Protected GSS-API Negotiation)是
微软提供的一种使用GSS-
API认证机制的安全协议,用于使Webserver共享Windows Credentials,它扩展了
Kerberos(一种网络认证协议)。
SPNEGO(SPNEGO: Simple and Protected GSS-API Negotiation)是
微软提供的一种使用GSS-
API认证机制的安全协议,用于使Webserver共享Windows Credentials,它扩展了
Kerberos(一种网络认证协议)。
SPNEGO是一种使用GSS-API(通用
安全服务应用接口)认证机制的安全协议。GSS-API是一个同时包含
应用程序接口和接入认证方法学的文字处理函数集。
如果web服务器可以解析客户机发来的SPNEGOtoken,那么这个token就用来实现安全的
单点登录(securesingle sing on)。因此用户的身份就用一种安全方式协商给web服务器。这就是用户经常在访问IIS时体验的。需要注意的是SPNEGO支持基于Kerberos或NTLMcredentials 的Active Directory credentials。IBMTAI方案只支持基于
Kerberos credentials的。TAM(TivoliAccess Manager)支持NTLM和
Kerberos两种。
SPNEGO协议通过使用接口和接入认证产生了一个应用协议和一个认证协议相互作用的一张简表。在这种模式下,应用协议主要负责运送认证协议生成的不相关联和不透明的包。这些由GSS规格提及作为安全令牌的包执行认证过程。应用协议对于安全令牌的内容是不可见的;它只是负责传送这些安全令牌。
因为可以有多个可并存的GSS认证协议的存在,决定使用哪个协议就变得尤为重要。最初的GSS设计了一个静态的,在应用程序与GSS实施间编译时的绑定。SPNEGO 填充了这种介绍一个可并存的GSS套件给其他GSS机制的需要。更多近来的实践是提供超过一个认证的机制---甚至只是一个单独的应用协议。它安全的在几个认证机制间协商,选择一个用来满足应用协议认证的需要。
微软对SPNEGO协议已经做出了一些改进:包括在早期实施时的某些错误,以及与某些非GSS方案的优化。这些改进构成了这一规范的基础。
首先,应用协议在
客户端调用认证协议。客户端部分的认证协议建立一个安全令牌并将令牌返回给呼叫的应用协议。接着应用协议传送安全令牌到其连接在嵌入有应用协议的服务器端。在服务器端,服务器的应用协议提取出安全令牌并提供给服务器端的认证协议。服务器端的认证协议开始处理这个安全令牌,随后可能会产生一个响应,又或者由它来决定此次认证已经完成。如果又有一个安全令牌产生,应用协议必须把它送回给
客户端使认证过程能继续下去。
安全令牌的交换会一直进行下去,直到一边决定认证失败或两边都认为认证成功。如果认证失败,应用协议会断开连接并显示出错误讯息。如果认证成功,应用协议能信任申请方的身份直到支持的应用协议能够完成为止。判定成功或失败的责任并不在应用协议,而在抽象的安全协议,则大大简化了应用协议的任务。当认证完成后,特定会话的安全服务就会可用。应用协议接着就可以调用认证协议来签认或加密由一部分应用协议发出的消息。在大致相同的方式下,特定会话
安全服务的具体操作被执行,其中应用协议可以表明哪部分消息已经加密,且应用协议必须含有每条消息的安全令牌。被签认或加密的消息,应用程序能够获得消息的保密性和完整性,并且能发现消息丢失,异常投递和重新传送。