Snego

Snego 的身份验证服务标识符为 RPC_C_AUTHN_GSS_NEGOTIATE,实际上不提供身份验证服务本身。 而是采用身份验证服务列表,并协商将在客户端和服务器之间工作的服务。 Snego 不使用身份验证参数,但会将其传递给所选的身份验证服务,该服务会执行实际身份验证。 Snego 于 1998 年 12 月在 RFC 2478 文件中由 Internet 工程任务组 (IETF) 标准化。

不知道远程计算机可以提供哪些身份验证服务时,Snego 非常有用。

若要使用 Snego,客户端和服务器都必须将 Snego 指定为身份验证服务。 服务器将 RPC_C_AUTHN_GSS_NEGOTIATE 指定为 SOLE_AUTHENTICATION_SERVICE 结构之一的 dwAuthnSvc 成员,该结构位于传递给 CoInitializeSecurityasAuthSvc 数组参数中。 客户端可以通过调用 CoSetProxyBlanket 并将 RPC_C_AUTHN_GSS_NEGOTIATE 作为 dwAuthnSvc 参数传递来指定 Snego。 客户端还应通过传递给 CoSetProxyBlanket 调用中的 pAuthInfo 参数的 SEC_WINNT_AUTH_IDENTITY_EX 结构的 PackageList 成员来为 Snego 提供可能的身份验证服务列表。 如果 pAuthInfoNULL,Snego 将在计算机上安装的安全包中撰写身份验证服务列表。 然后,Snego 将身份验证服务列表发送到服务器,将该列表与服务器的可用身份验证服务进行比较,并选取用于连接的身份验证服务。

注意

Schannel 不能位于 Snego 使用的身份验证服务列表中。

 

客户端还可以在调用 CoInitializeSecurity 时指定 Snego。 CoSetProxyBlanketdwAuthnSvcpAuthInfo 参数将成为通过 pAuthList 参数传递给 CoInitializeSecuritySOLE_AUTHENTICATION_INFO 结构的成员。 这些成员的值的详细信息与上一段中所述相同。

如果使用 Snego,则调用 CoQueryProxyBlanketCoQueryClientBlanket 将返回 Snego 作为身份验证服务,而不是 Snego 选择用于建立连接的实际身份验证服务。

COM 和安全包