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 成员,该结构位于传递给 CoInitializeSecurity的 asAuthSvc 数组参数中。 客户端可以通过调用 CoSetProxyBlanket 并将 RPC_C_AUTHN_GSS_NEGOTIATE 作为 dwAuthnSvc 参数传递来指定 Snego。 客户端还应通过传递给 CoSetProxyBlanket 调用中的 pAuthInfo 参数的 SEC_WINNT_AUTH_IDENTITY_EX 结构的 PackageList 成员来为 Snego 提供可能的身份验证服务列表。 如果 pAuthInfo 为 NULL,Snego 将在计算机上安装的安全包中撰写身份验证服务列表。 然后,Snego 将身份验证服务列表发送到服务器,将该列表与服务器的可用身份验证服务进行比较,并选取用于连接的身份验证服务。
注意
Schannel 不能位于 Snego 使用的身份验证服务列表中。
客户端还可以在调用 CoInitializeSecurity 时指定 Snego。 CoSetProxyBlanket 的 dwAuthnSvc 和 pAuthInfo 参数将成为通过 pAuthList 参数传递给 CoInitializeSecurity 的 SOLE_AUTHENTICATION_INFO 结构的成员。 这些成员的值的详细信息与上一段中所述相同。
如果使用 Snego,则调用 CoQueryProxyBlanket 或 CoQueryClientBlanket 将返回 Snego 作为身份验证服务,而不是 Snego 选择用于建立连接的实际身份验证服务。
相关主题