SaslAcceptSecurityContext 函数 (sspi.h)

SaslAcceptSecurityContext 函数包装对安全支持提供程序接口AcceptSecurityContext 的标准调用 (常规) 函数,包括 SASL 服务器 Cookie 的创建。

语法

SECURITY_STATUS SEC_ENTRY SaslAcceptSecurityContext(
  [in]            PCredHandle    phCredential,
  [in, optional]  PCtxtHandle    phContext,
  [in]            PSecBufferDesc pInput,
  [in]            unsigned long  fContextReq,
  [in]            unsigned long  TargetDataRep,
  [out]           PCtxtHandle    phNewContext,
  [in, out]       PSecBufferDesc pOutput,
  [out]           unsigned long  *pfContextAttr,
  [out, optional] PTimeStamp     ptsExpiry
);

参数

[in] phCredential

服务器凭据的句柄。 服务器调用 AcquireCredentialsHandle 函数,并设置了 INBOUND 标志以检索此句柄。

[in, optional] phContext

指向 CtxtHandle 结构的指针。 在首次调用 AcceptSecurityContext (General) 时,此指针为 NULL。 在后续调用中, phContext 是第一次调用在 phNewContext 参数中返回的部分格式上下文的句柄。

[in] pInput

指向客户端调用 InitializeSecurityContext 生成的 SecBufferDesc 结构的指针 (包含输入缓冲区描述符的 General) 函数。

SASL 需要 SECBUFFER_TOKEN类型的单个缓冲区。 第一次调用 AcceptSecurityContext (General) 函数的缓冲区为空,并包含从客户端收到的第二次调用的质询响应。

[in] fContextReq

指定服务器建立上下文所需的属性的位标志。 可以使用按位 OR 操作组合位标志。 下表列出了可能的值。

“值” 含义
ASC_REQ_CONFIDENTIALITY
加密和解密消息。

仅适用于 SASL 的摘要 SSP。

ASC_REQ_HTTP
使用用于 HTTP 的摘要。 省略此标志以将摘要用作 SASL 机制。

[in] TargetDataRep

指示目标上的数据表示形式,例如字节排序。 此值可以是SECURITY_NATIVE_DREP或SECURITY_NETWORK_DREP。

[out] phNewContext

指向 CtxtHandle 结构的指针。 在首次调用 AcceptSecurityContext (General) 时,此指针接收新的上下文句柄。 在后续调用中, phNewContext 可以与 phContext 参数中指定的句柄相同。

[in, out] pOutput

指向包含输出缓冲区描述符 的 SecBufferDesc 结构的指针。 此缓冲区将发送到客户端,以便输入对 InitializeSecurityContext (常规) 的其他调用。 即使函数返回SEC_E_OK,也可能生成输出缓冲区。 生成的任何缓冲区都必须发送回客户端应用程序。

[out] pfContextAttr

指向一个变量的指针,该变量接收一组指示已建立上下文的属性的位标志。 有关各种属性的说明,请参阅 上下文要求。 用于此参数的标志以 ASC_RET 为前缀,例如 ASC_RET_DELEGATE。

在最终函数调用成功返回之前,不要检查与安全相关的属性。 与安全性无关的属性标志(如ASC_RET_ALLOCATED_MEMORY标志)可以在最终返回之前进行检查。

[out, optional] ptsExpiry

指向接收上下文过期时间的 TimeStamp 结构的指针。 建议 安全包 始终在本地时间返回此值。

注意 在最后一次调用身份验证过程之前,上下文的过期时间可能不正确,因为在协商的后续阶段将提供更多信息。 因此, ptsTimeStamp 必须是 NULL ,直到最后一次调用函数。
 

返回值

如果调用成功完成,此函数将返回SEC_E_OK。 下表显示了一些可能的失败返回值。

返回代码 说明
SEC_E_ALGORITHM_MISMATCH
不允许进行 Authz 处理。
SEC_E_INSUFFICIENT_MEMORY
内存不足,无法完成请求。
SEC_E_INVALID_TOKEN
pOutput 参数中没有令牌缓冲区,或者消息解密失败。

注解

识别返回 SEC_E_OK的 AcceptSecurityContext (常规) 函数的最后调用。 如果生成了返回令牌,则会在返回客户端的一次往返行程中暂停 SASL 处理,以允许处理最终令牌。 交换完成后,SEC_E_CONTINUE_NEEDED将返回到应用程序,并使用 SSPI 消息函数加密额外的 SASL 服务器 Cookie。 初始服务器 Cookie 指示是否支持 INTEGRITY 和 PRIVACY。 此初始服务器 Cookie 由客户端处理,客户端返回客户端 Cookie 以指示客户端请求的服务。 然后,服务器将解密客户端 Cookie,并针对以下消息流量确定最终服务。

要求

   
最低受支持的客户端 无受支持的版本
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 sspi.h (包括 Security.h)
Library Secur32.lib
DLL Secur32.dll