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,则应用程序应忽略此结构的成员( AuthStatus、 SecStatus 和 AuthType 除外)。
SecStatus
SECURITY_STATUS值,指示 AuthStatus 成员为 HttpAuthStatusFailure 时的安全失败状态。
Flags
指示以下身份验证属性的身份验证标志:
Attribute | 含义 |
---|---|
|
提供的令牌适用于 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 |