Partilhar via


Autenticação do Passport no WinHTTP

O Microsoft Windows HTTP Services (WinHTTP) suporta totalmente o uso do lado do cliente do protocolo de autenticação do Microsoft Passport. Este tópico fornece uma visão geral das transações envolvidas na autenticação do Passport e como lidar com elas.

Observação

No WinHTTP 5.1, a autenticação do Passport está desabilitada por padrão.

 

Passaporte 1.4

O Passport é um componente central dos serviços de bloco de construção do Microsoft .NET. Ele permite que as empresas desenvolvam e ofereçam serviços Web distribuídos em uma ampla gama de aplicativos e permite que seus membros usem um nome de entrada e senha em todos os sites participantes.

WinHTTP fornece suporte de plataforma para o Microsoft Passport 1.4 implementando o protocolo do lado do cliente para autenticação do Passport 1.4. Ele libera os aplicativos dos detalhes de interação com a infraestrutura do Passport e os nomes de usuário e senhas armazenados no Windows XP. Essa abstração faz com que o uso do Passport não seja diferente da perspetiva de um desenvolvedor do que usar esquemas de autenticação tradicionais como Basic ou Digest.

Windows XP: O HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns chave do Registro identifica o número de vezes que o Assistente de Autenticação do Passport é exibido quando a autenticação PassPort é necessária. Se o valor dessa chave for definido como um número maior que 5, o assistente não será exibido.

As seções a seguir descrevem as transações envolvidas na autenticação do Passport do ponto de vista de um aplicativo cliente. Para o desenvolvimento do Passport no servidor, consulte a Visão geral da documentação do SDK do Passport.

Pedido Inicial

Quando um cliente solicita um recurso em um servidor que requer autenticação do Passport, o servidor verifica a solicitação quanto à presença de tíquetes . Se um de tíquete de válido for enviado com a solicitação, o servidor responderá com o recurso solicitado. Se o de tíquete de não existir no cliente, o servidor responderá com um código de status 302. A resposta inclui o cabeçalho do desafio, "WWW-Authenticate: Passport1.4". Os clientes que não estão usando o Passport podem seguir o redirecionamento para o servidor de login do Passport. Clientes mais avançados normalmente entram em contato com o nexo do Passport para determinar a localização do servidor de login do Passport.

Observação

Central para a rede Microsoft Passport é o Passport Nexus, que facilita a sincronização de sites participantes do Passport para garantir que cada site tenha os detalhes mais recentes sobre a configuração de rede e outros problemas. Cada componente do Passport (Passport Manager, servidores de login, servidores de atualização e assim por diante) se comunica periodicamente com o Nexus para recuperar as informações necessárias para localizar e se comunicar adequadamente com os outros componentes da rede do Passport. Essas informações são recuperadas como um documento XML chamado Documento de Configuração de Componente ou CCD.

 

A imagem a seguir mostra a solicitação inicial para um afiliado do Passport.

imagem mostra o pedido inicial a um afiliado do passaporte.

Servidor de Login do Passport

Um servidor de login do Passport lida com todas as solicitações de tíquetes de para qualquer recurso em um de autoridade de domínio do Passport. Antes que uma solicitação possa ser autenticada usando o Passport, o aplicativo cliente deve entrar em contato com o servidor de login para obter os tíquetes de apropriados.

Quando um cliente solicita tíquetes de um servidor de login do Passport, o servidor de login normalmente responde com um código de status 401 para indicar que as credenciais do usuário devem ser fornecidas. Quando essas credenciais são fornecidas, o servidor de logon responde com os tíquetes de necessários para acessar o recurso especificado no servidor que contém o recurso originalmente solicitado. O servidor de login também pode redirecionar o cliente para outro servidor que pode fornecer o recurso solicitado.

imagem mostra uma solicitação de tíquete de cliente para um servidor de login do Passport.

Pedido autenticado

Quando o cliente tem os tíquetes que correspondem a um determinado servidor, esses tíquetes são incluídos com todas as solicitações para esse servidor. Se os tíquetes não foram modificados desde que foram recuperados do servidor de login do Passport e os tíquetes forem válidos para o servidor de recursos, o servidor de recursos enviará uma resposta que inclui o recurso solicitado e cookies que indicam que o usuário está autenticado para solicitações futuras.

Os cookies adicionais na resposta destinam-se a acelerar o processo de autenticação. Solicitações adicionais na mesma sessão para recursos em servidores na mesma Autoridade de Domínio do Passport incluem esses cookies adicionais. As credenciais não precisam ser enviadas para o servidor de login novamente até que os cookies expirem.

imagem mostra uma solicitação autenticada para o servidor de login do Passport.

Usando o Passport no WinHTTP

A autenticação do Passport no WinHTTP é muito semelhante a outros esquemas de autenticação. Consulte Autenticação no WinHTTP para obter uma visão geral da autenticação no WinHTTP.

No WinHTTP 5.1, a autenticação do Passport é desabilitada por padrão e deve ser explicitamente habilitada com WinHttpSetOption antes do uso.

O WinHTTP lida com muitos dos detalhes da transação internamente para autenticação do Passport. Durante a solicitação inicial, o servidor responde com um código de status 302 quando a autenticação é necessária. O código de status 302 realmente indica um redirecionamento e faz parte do protocolo do Passport para compatibilidade com versões anteriores. WinHTTP oculta o código de status 302 e contata o nexo do Passport e, em seguida, o servidor de login. O aplicativo WinHTTP é notificado do código de status 401 enviado pelo servidor de login para solicitar credenciais de usuário. Para o aplicativo, no entanto, parece que o status 401 se origina do servidor do qual o recurso foi solicitado. Dessa forma, o aplicativo WinHTTP não está ciente das interações com outros servidores e pode manipular a autenticação do Passport com o mesmo código que lida com outros esquemas de autenticação.

Normalmente, um aplicativo WinHTTP responde a um código de status 401 fornecendo credenciais de autenticação. Quando as credenciais são fornecidas com WinHttpSetCredentials ou SetCredentials para autenticação de passaporte, as credenciais estão realmente sendo enviadas para o servidor de login, não para o servidor indicado na solicitação.

No entanto, ao responder a um código de status 407, um aplicativo WinHTTP deve usar WinHttpSetOption para fornecer credenciais de proxy, em vez de WinHttpSetCredentials. Como WinHttpSetOption é uma maneira menos segura de fornecer credenciais, ela normalmente deve ser evitada.

Uma vez recuperados, tíquetes são gerenciados internamente e enviados automaticamente para os servidores aplicáveis em solicitações futuras.

Observação

WinHTTP permite que você desabilite o redirecionamento automático chamando a função WinHttpSetOption para o sinalizador de WINHTTP_OPTION_DISABLE_FEATURE e especificando um valor de WINHTTP_DISABLE_REDIRECTS. A desativação do redirecionamento não interfere com o redirecionamento que o WinHTTP manipula internamente para transações do Passport.

 

O WinHTTP pode concluir com êxito a autenticação do Passport mesmo se um aplicativo desabilitar o redirecionamento automático. No entanto, após a conclusão da autenticação do Passport, um redirecionamento implícito deve ocorrer a partir da URL do servidor de login do Passport de volta para a URL original. Esse redirecionamento não é acionado por uma resposta HTTP 302, mas está implícito no protocolo do Passport.

WinHTTP lida com esse redirecionamento implícito especialmente. Se um aplicativo tiver desabilitado o redirecionamento automático, o WinHTTP exigirá que o aplicativo dê "permissão" ao WinHTTP para redirecionar automaticamente neste caso especial.

Para que o WinHTTP redirecione de volta para a URL original após a autenticação, o aplicativo deve registrar uma função de retorno de chamada usando WinHttpSetStatusCallback. WinHTTP pode então notificar o aplicativo com um retorno de chamada WINHTTP_CALLBACK_STATUS_REDIRECT, que permite que o aplicativo cancele o redirecionamento. Um aplicativo não precisa fornecer nenhuma funcionalidade na função de retorno de chamada; o registro do retorno de chamada é suficiente para permitir que o WinHTTP siga esse redirecionamento de caso especial.

A mensagem ERROR_WINHTTP_LOGIN_FAILURE é gerada se uma função de retorno de chamada não for definida pelo aplicativo.

Passaporte Cobranding

Ao contrário dos esquemas de autenticação tradicionais suportados pelo WinHTTP, o Passport pode ser extensivamente cobranded. Ao receber um código de status 401 que indica um desafio, um aplicativo pode recuperar o cobranding gráfico e texto. Recupere uma URL para o gráfico de cobranding chamando WinHttpQueryOption com o sinalizador WINHTTP_OPTION_PASSPORT_COBRANDING_URL. Recupere o cobranding texto chamando WinHttpQueryOption com o sinalizador WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT. Esses itens podem ser usados para personalizar uma caixa de diálogo de coleta de credenciais.

Nomes de usuário e senhas armazenados

O Windows XP introduziu o conceito de Nomes de Usuário e Senhas Armazenados. Se as credenciais do Passport de um usuário forem salvas por meio da do Assistente de Registro do Passport ou da caixa de diálogo padrão Credential, elas serão salvas em Nomes de usuário e senhas armazenados. Ao usar o WinHTTP no Windows XP ou posterior, o WinHTTP usa automaticamente as credenciais nos Nomes de Usuário e Senhas Armazenados se as credenciais não estiverem definidas explicitamente. Isso é semelhante ao suporte de credenciais de logon padrão para NTLM/Kerberos. No entanto, o uso de credenciais padrão do Passport não está sujeito às configurações de diretiva de logon automático.

Desativando a autenticação do passaporte

Alguns aplicativos podem exigir a capacidade de desabilitar a autenticação do Passport. Por exemplo, quando um afiliado do Passport responde com o código de status 302 inicial, pode ser preferível seguir o redirecionamento indicado e renderizar a página de autenticação do HTML Passport em vez de permitir que o WinHTTP manipule a autenticação internamente. A autenticação do Passport é desabilitada no WinHTTP chamando a funçãoWinHttpSetOptioncom a opção WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH e passando o valor WINHTTP_DISABLE_PASSPORT_AUTH. Mais tarde, ele pode ser reativado com WINHTTP_ENABLE_PASSPORT_AUTH.

A autenticação do Passport não pode ser desabilitada ao usar o objeto WinHttpRequest.

Conforme observado anteriormente nesta seção, a autenticação do Passport é desabilitada por padrão no WinHTTP 5.1 e deve ser explicitamente habilitada com WinHttpSetOption antes do uso.

Substitui a configuração do passaporte usada para testes

O WinHTTP depende das informações de configuração que baixa do servidor nexus do passport para oferecer suporte à autenticação do Passport 1.4. Por padrão, esse servidor seguro (SSL) é nexus.passport.com e o recurso de configuração é rdr/pprdr.asp, que é conhecido como a configuração de passaporte "ao vivo". O formato das informações é um cabeçalho HTTP personalizado "PassportURLs", seguido por pares atributo-valor delimitados por vírgula.

Por exemplo, "https://nexus.passport.com/rdr/pprdr.asp" Retorna as seguintes informações de configuração:

PassportURLs: DARealm=Passport.net,
DALogin=login.passport.com/login2.asp,
DAReg=https://register.passport.com/defaultwiz.asp,
Properties=https://memberservices.passport.com/ppsecure/MSRV_EditProfile.asp,
Privacy=https://www.passport.com/consumer/privacypolicy.asp,
GeneralRedir=https://nexusrdr.passport.com/redir.asp,
Help=https://memberservices.passport.com/UI/MSRV_UI_Help.asp,
ConfigVersion=2
\r\n

As partes que são relevantes para WinHTTP são DARealm, DALogin e ConfigVersion. Por motivos de desempenho, eles são armazenados em cache durante o tempo de vida de uma sessão WinHTTP. Esses três valores podem ser substituídos por aplicativos que são necessários para trabalhar com outra infraestrutura de passaporte diferente da configuração de produção "ao vivo", alterando as configurações de registro apropriadas em

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  WinHttp
                     Passport Test
LoginServerRealm (REG_SZ)    For example: abc.net
LoginServerUrl (REG_SZ)      For example: https://private-login.passport.com/login2.asp
ConfigVersion (REG_DWORD)    For example: 10

Se LoginServerUrl estiver presente no registro, WinHTTP não contata o servidor nexus para outros valores de configuração. Nesse caso, LoginServerRealm e ConfigVersion também devem ser definidos através do registro para corrigir valores.

Um aplicativo pode, para fins de teste, ser obrigado a baixar a configuração do passaporte de um servidor nexus privado. Isso pode ser feito substituindo dois valores do Registro em

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  WinHttp
                     Passport Test
NexusHost (REG_SZ)    e.g. private-nexus.passport.com
NexusObj(REG_SZ)      e.g. config/passport.asp

Autenticação no WinHTTP