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 (常规)时,此指针 NULL。 在后续调用中,phContext 是第一次调用在 phNewContext 参数中返回的部分形式的上下文的句柄。

[in] pInput

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

SASL 需要 SECBUFFER_TOKEN类型的单个缓冲区。 对于对 AcceptSecurityContext(常规) 函数的第一次调用,缓冲区为空,其中包含从客户端接收的第二次调用的质询响应。

[in] fContextReq

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

价值 意义
ASC_REQ_CONFIDENTIALITY
加密和解密消息。

仅适用于 SASL 的摘要 SSP。

ASC_REQ_HTTP
对 HTTP 使用摘要。 省略此标志以使用 Digest 作为 SASL 机制。

[in] TargetDataRep

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

[out] phNewContext

指向 CtxtHandle 结构的指针。 在第一次调用 AcceptSecurityContext (常规)时,此指针将接收新的上下文句柄。 在后续调用中,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返回到应用程序,并附加 SASL 服务器 Cookie 使用 SSPI 消息函数加密。 初始服务器 Cookie 指示是否支持 INTEGRITY 和 PRIVACY。 此初始服务器 Cookie 由客户端处理,客户端返回客户端 Cookie 以指示客户端请求的服务。 然后,客户端 Cookie 由服务器解密,最终服务针对以下消息流量确定。

要求

要求 价值
最低支持的客户端 不支持
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 sspi.h (包括 Security.h)
Secur32.lib
DLL Secur32.dll