AcceptSecurityContext 函数 (sspi.h)
AcceptSecurityContext (CredSSP) 函数允许传输应用程序的服务器组件在服务器和远程客户端之间建立安全上下文。 远程客户端调用 InitializeSecurityContext (CredSSP) 函数来启动建立安全上下文的过程。 服务器可能需要远程客户端的一个或多个回复令牌才能完成安全上下文的建立。
语法
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
[in, optional] PCredHandle phCredential,
[in, optional] PCtxtHandle phContext,
[in, optional] PSecBufferDesc pInput,
[in] unsigned long fContextReq,
[in] unsigned long TargetDataRep,
[in, out, optional] PCtxtHandle phNewContext,
[in, out, optional] PSecBufferDesc pOutput,
[out] unsigned long *pfContextAttr,
[out, optional] PTimeStamp ptsExpiry
);
参数
[in, optional] phCredential
服务器凭据的句柄。 为了检索此句柄,服务器调用 AcquireCredentialsHandle (CredSSP) 函数,并设置了 SECPKG_CRED_INBOUND 或 SECPKG_CRED_BOTH 标志。
[in, optional] phContext
指向 CtxtHandle 结构的指针。 在首次调用 AcceptSecurityContext (CredSSP) 时,此指针为 NULL。 在后续调用中, phContext 指定第一次调用在 phNewContext 参数中返回的部分格式上下文。
[in, optional] pInput
指向由客户端调用 InitializeSecurityContext 生成的 SecBufferDesc 结构的指针 , (CredSSP) 。 结构包含输入缓冲区描述符。
第一个缓冲区的类型必须为 SECBUFFER_TOKEN ,并且包含从客户端接收的安全令牌。 第二个缓冲区的类型应为 SECBUFFER_EMPTY。
[in] fContextReq
-位标志,指定服务器建立上下文所需的属性。 可以使用按位 OR 操作组合位标志。 此参数可使用以下一个或多个值。
值 | 含义 |
---|---|
|
凭据安全支持提供程序 (CredSSP) 将分配输出缓冲区。 使用完输出缓冲区后,通过调用 FreeContextBuffer 函数释放它们。 |
|
安全上下文不会处理格式化消息。 |
|
允许服务器模拟客户端。 对于 受约束委派,请忽略此标志。 |
|
发生错误时,远程方将收到通知。 |
|
检测重播的数据包。 |
|
检测不按顺序接收的消息。 |
|
支持面向流的连接。 |
有关可能的属性标志及其含义,请参阅 上下文要求。 用于此参数的标志以 ASC_REQ 为前缀,例如,ASC_REQ_DELEGATE。
客户端可能不支持请求的属性。 有关详细信息,请参阅 pfContextAttr 参数。
[in] TargetDataRep
目标上的数据表示形式,例如字节排序。 此参数可以是 SECURITY_NATIVE_DREP 或 SECURITY_NETWORK_DREP。
[in, out, optional] phNewContext
指向 CtxtHandle 结构的指针。 在首次调用 AcceptSecurityContext (CredSSP) 时,此指针接收新的上下文句柄。 在后续调用中, phNewContext 可以与 phContext 参数中指定的句柄相同。
[in, out, optional] pOutput
指向包含输出缓冲区描述符 的 SecBufferDesc 结构的指针。 此缓冲区将发送到客户端,以便输入对 InitializeSecurityContext (CredSSP) 的其他调用。 即使函数返回SEC_E_OK,也可能生成输出缓冲区。 生成的任何缓冲区都必须发送回客户端应用程序。
在输出时,此缓冲区接收安全上下文的令牌。 必须将令牌发送到客户端。 函数还可以返回 SECBUFFER_EXTRA 类型的缓冲区。
[out] pfContextAttr
指向一组位标志的指针,这些标志指示已建立上下文的属性。 有关各种属性的说明,请参阅 上下文要求。 用于此参数的标志以 ASC_RET 为前缀,例如,ASC_RET_DELEGATE。
在最终函数调用成功返回之前,不要检查与安全相关的属性。 与安全性无关的属性标志(如ASC_RET_ALLOCATED_MEMORY标志)可以在最终返回之前进行检查。
[out, optional] ptsExpiry
指向接收上下文过期时间的 TimeStamp 结构的指针。 建议 安全包 始终在本地时间返回此值。
返回值
此函数返回以下值之一。
返回代码/值 | 说明 |
---|---|
|
函数成功。 输入缓冲区中的数据不完整。 应用程序必须从客户端读取其他数据,并再次调用 AcceptSecurityContext (CredSSP) 。 |
|
函数失败。 没有足够的内存可用于完成请求的操作。 |
|
函数失败。 发生了未映射到 SSPI 错误代码的错误。 |
|
函数失败。 传递给函数的句柄无效。 |
|
函数失败。 传递给函数的令牌无效。 |
|
登录失败。 |
|
函数失败。 无法联系任何机构进行身份验证。 这可能是由于以下情况造成的:
|
|
函数失败。 phCredential 参数中指定的凭据句柄无效。 |
|
函数成功。 已接受从客户端接收的安全上下文。 如果函数生成了输出令牌,则必须将令牌发送到客户端进程。 |
|
函数失败。 fContextReq 参数 (ASC_REQ_DELEGATE 或ASC_REQ_PROMPT_FOR_CREDS) 指定了无效的上下文属性标志。 |
|
函数成功。 服务器必须调用 CompleteAuthToken 并将输出令牌传递给客户端。 然后,服务器必须等待客户端的返回令牌,然后才能对 AcceptSecurityContext (CredSSP) 进行另一次调用。 |
|
函数成功。 在调用 CompleteAuthToken 之前,服务器必须完成从客户端生成消息。 |
|
函数成功。 服务器必须将输出令牌发送到客户端,并等待返回的令牌。 返回的令牌应在 pInput 中传递,以便再次调用 AcceptSecurityContext (CredSSP) 。 |
注解
AcceptSecurityContext (CredSSP) 函数是 InitializeSecurityContext (CredSSP) 函数的服务器对应函数。
当服务器收到来自客户端的请求时,它使用 fContextReq 参数指定会话所需的内容。 以这种方式,服务器可以要求客户端能够使用机密或 完整性检查会话;它可以拒绝无法满足该需求的客户端。 或者,服务器不需要任何内容;客户端需要或可以提供的任何内容都会在 pfContextAttr 参数中返回。
fContextReq 和 pfContextAttr 参数是表示各种上下文属性的位掩码。 有关各种属性的说明,请参阅 上下文要求。
建立安全上下文后,服务器应用程序可以使用 QuerySecurityContextToken 函数检索客户端证书映射到的用户帐户的句柄。 此外,服务器可以使用 ImpersonateSecurityContext 函数来模拟用户。
要求
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | sspi.h (包括 Security.h) |
Library | Secur32.lib |
DLL | Secur32.dll |