Snego
O Snego, cujo identificador de serviço de autenticação é RPC_C_AUTHN_GSS_NEGOTIATE, na verdade não fornece serviços de autenticação em si. Em vez disso, ele usa uma lista de serviços de autenticação e negocia um serviço que funcionará entre o cliente e o servidor. Os parâmetros de autenticação não são usados pelo Snego mas são passados para o serviço de autenticação escolhido, que faz a autenticação real. O Snego foi padronizado pela Internet Engineering Task Force (IETF) em dezembro de 1998, no documento RFC 2478.
O Snego é útil quando você não sabe quais serviços de autenticação o computador remoto pode fornecer.
Para usar o Snego, o cliente e o servidor devem especificar o Snego como o serviço de autenticação. O servidor especifica RPC_C_AUTHN_GSS_NEGOTIATE como o membro dwAuthnSvc de uma das estruturas SOLE_AUTHENTICATION_SERVICE no parâmetro de matriz asAuthSvc que é passado para CoInitializeSecurity. O cliente pode especificar Snego chamando CoSetProxyBlanket e passando RPC_C_AUTHN_GSS_NEGOTIATE como o parâmetro dwAuthnSvc. O cliente também deve fornecer uma lista de possíveis serviços de autenticação para o Snego por meio do membro PackageList da estrutura SEC_WINNT_AUTH_IDENTITY_EX que é passada para o parâmetro pAuthInfo na chamada para CoSetProxyBlanket. Se pAuthInfo for NULL, o Snego compõe uma lista de serviços de autenticação a partir dos pacotes de segurança instalados no computador. Em seguida, o Snego envia a lista de serviços de autenticação para o servidor, compara a lista com os serviços de autenticação disponíveis do servidor e escolhe um serviço de autenticação a ser usado para a conexão.
Observação
O Schannel não pode estar na lista de serviços de autenticação que o Snego usa.
Os clientes também podem especificar Snego quando chamam CoInitializeSecurity. Os parâmetros dwAuthnSvc e pAuthInfo de CoSetProxyBlanket tornam-se membros de uma estrutura SOLE_AUTHENTICATION_INFO que é passada para CoInitializeSecurity por meio de seu parâmetro pAuthList. Os detalhes dos valores desses membros são os mesmos descritos no parágrafo anterior.
Se o Snego for usado, as chamadas para CoQueryProxyBlanket ou CoQueryClientBlanket retornarão o Snego como o serviço de autenticação, em vez do serviço de autenticação real que o Snego escolheu para estabelecer a conexão.