http.h) (HTTP_REQUEST_AUTH_INFO 结构

HTTP_REQUEST_AUTH_INFO结构包含请求的身份验证状态,其中包含客户端令牌的句柄,接收进程可以使用该句柄来模拟经过身份验证的客户端。

此结构包含在 HTTP_REQUEST_INFO 结构中。

语法

typedef struct _HTTP_REQUEST_AUTH_INFO {
  HTTP_AUTH_STATUS       AuthStatus;
  SECURITY_STATUS        SecStatus;
  ULONG                  Flags;
  HTTP_REQUEST_AUTH_TYPE AuthType;
  HANDLE                 AccessToken;
  ULONG                  ContextAttributes;
  ULONG                  PackedContextLength;
  ULONG                  PackedContextType;
  PVOID                  PackedContext;
  ULONG                  MutualAuthDataLength;
  PCHAR                  pMutualAuthData;
  USHORT                 PackageNameLength;
  PWSTR                  pPackageName;
} HTTP_REQUEST_AUTH_INFO, *PHTTP_REQUEST_AUTH_INFO;

成员

AuthStatus

指示请求的最终身份验证状态 的 HTTP_AUTH_STATUS 枚举的成员。

如果身份验证状态不是 HttpAuthStatusSuccess,则应用程序应忽略此结构的成员( AuthStatusSecStatusAuthType 除外)。

SecStatus

SECURITY_STATUS值,指示 AuthStatus 成员为 HttpAuthStatusFailure 时的安全失败状态。

Flags

指示以下身份验证属性的身份验证标志:

Attribute 含义
HTTP_REQUEST_AUTH_FLAG_TOKEN_FOR_CACHED_CRED
提供的令牌适用于 NTLM,基于“保持连接” (KA) 连接的缓存凭据。

AuthType

HTTP_REQUEST_AUTH_TYPE 枚举的成员,指示为请求尝试或建立的身份验证方案。

AccessToken

客户端令牌的句柄,接收进程可以使用该句柄来模拟经过身份验证的客户端。

当不再需要令牌时,应通过调用 CloseHandle 来关闭令牌的句柄。 此令牌仅在请求的生存期内有效。 应用程序可以重新生成初始 401 质询,以在令牌过期时重新进行身份验证。

ContextAttributes

访问令牌的客户端上下文属性。

PackedContextLength

PackedContext 的长度(以字节为单位)。

PackedContextType

PackedContext 成员中的上下文类型。

PackedContext

身份验证类型的安全上下文。

应用程序可以通过调用 SSPI QueryContextAttributes API 来查询已打包上下文的属性。 但是,应用程序必须为指示的 AuthType 获取安全包的凭据句柄。

当不再需要序列化上下文时,应用程序应调用 SSPI FreeContextBuffer API 以释放序列化上下文。

MutualAuthDataLength

pMutualAuthData 成员的长度(以字节为单位)。

pMutualAuthData

WWW-Authenticate 标头中使用的 Base64 编码的相互身份验证数据。

PackageNameLength

pPackageName

注解

从 HTTP 版本 2.0 开始, HTTP_REQUEST 结构包含 HTTP_REQUEST_INFO 结构。 当请求信息类型为 HttpRequestInfoTypeAuth 时,HTTP_REQUEST_INFO结构的 pVoid 成员指向HTTP_REQUEST_AUTH_INFO

当应用程序收到具有此结构的请求且请求尚未经过身份验证时,它可以在 HTTP_MULTIPLE_KNOWN_HEADERS 结构中发送具有所需 WWW-Authenticate 标头集的初始 401 质询。 当 HTTP 服务器 API 完成身份验证握手时,它会填充 HTTP_REQUEST_AUTH_INFO 结构,并再次通过请求将其传递给应用程序。 HTTP 服务器 API 在此结构中提供表示客户端标识的访问令牌的句柄。

上下文属性

ContextAttributes 成员是为基于 SSPI 的方案提供的。 例如,SSPI 应用程序可以确定是否为相互身份验证的会话设置 ASC_RET_MUTUAL_AUTH

HTTP 服务器 API 不提供 PackedContext 成员中上下文的过期时间。 在特定情况下,应用程序可能需要过期时间,例如,启用 NTLM 凭据缓存时,应用程序会查询缓存上下文的过期时间。 如果服务器应用程序需要与访问令牌关联的基础客户端上下文的过期时间,它可以接收打包的上下文,并使用 SECPKG_ATTR_LIFESPAN调用 QueryContextAttributes

相互身份验证数据

默认情况下,HTTP 服务器 API 确保将相互身份验证数据添加到最终的 200 响应中;通常,服务器应用程序不负责发送相互身份验证数据。

但是,应用程序可以接收相互身份验证数据,并将其与最终响应一起发送。 当 HTTP_SERVER_AUTHENTICATION_INFO 结构的 ReceiveMutualAuth 成员设置为 true 时,应用程序将接收服务器凭据以及经过身份验证的请求。

pMutualAuthData 成员中提供的相互身份验证数据包含不带标头名称的 WWW-Authenticate 标头的确切值。 例如, pMutualAuthData 指向“Negotiate ade02938481eca”。 应用程序通过将提供的 pMutualAuthData 追加为响应标头值来生成 WWW-Authenticate 标头。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
标头 http.h

另请参阅

HTTP 服务器 API 版本 2.0 结构

HTTP_REQUEST_INFO

HTTP_REQUEST_V2