Autenticação do Passport no WinHTTP

Os Serviços HTTP do Microsoft Windows (WinHTTP) dão suporte total ao 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 é desabilitada por padrão.

 

Passport 1.4

O Passport é um componente principal 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.

O 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 aplicativos dos detalhes de interação com a infraestrutura do Passport e os Nomes de Usuário Armazenados e Senhas no Windows XP. Essa abstração torna o uso do Passport diferente da perspectiva de um desenvolvedor do que usar esquemas de autenticação tradicionais, como Basic ou Digest.

Windows XP: A chave do Registro HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns 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 desenvolvimento do Passport no lado do servidor, consulte a Visão geral da documentação do SDK do Passport.

Solicitação Inicial

Quando um cliente solicita um recurso em um servidor que requer autenticação do Passport, o servidor verifica a solicitação de presença de tíquetes. Se um tíquete válido for enviado com a solicitação, o servidor responderá com o recurso solicitado. Se o tíquete não existir no cliente, o servidor responderá com um código 302 status. 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 logon do Passport. Clientes mais avançados normalmente entram em contato com o Nexus do Passport para determinar a localização do servidor de logon do Passport.

Observação

Central para a rede do 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 passport (Passport Manager, servidores de logon, servidores de atualização e assim por diante) comunica-se periodicamente com o Nexus para recuperar as informações necessárias para localizar e se comunicar corretamente com os outros componentes na rede 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 uma afiliada do Passport.

A imagem mostra a solicitação inicial para uma afiliada do passport.

Servidor de Logon do Passport

Um servidor de logon do Passport lida com todas as solicitações de tíquetes para qualquer recurso em uma 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 logon para obter os tíquetes apropriados.

Quando um cliente solicita tíquetes de um servidor de logon do Passport, o servidor de logon normalmente responde com um código 401 status 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 necessários para acessar o recurso especificado no servidor que contém o recurso solicitado originalmente. O servidor de logon também pode redirecionar o cliente para outro servidor que possa fornecer o recurso solicitado.

A imagem mostra uma solicitação de tíquete do cliente para um servidor de logon do passport.

Solicitação autenticada

Quando o cliente tem os tíquetes que correspondem a um determinado servidor, esses tíquetes são incluídos em todas as solicitações para esse servidor. Se os tíquetes não tiverem sido modificados desde que foram recuperados do servidor de logon 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 ao servidor de logon novamente até que os cookies expirem.

A imagem mostra uma solicitação autenticada para o servidor de logon do passport.

Usando o Passport no WinHTTP

A autenticação de passaporte 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 manipula muitos dos detalhes da transação internamente para autenticação do Passport. Durante a solicitação inicial, o servidor responde com um código 302 status quando a autenticação é necessária. O código 302 status realmente indica um redirecionamento e faz parte do protocolo Passport para compatibilidade com versões anteriores. O WinHTTP oculta o código 302 status e entra em contato com o Nexus do Passport e, em seguida, com o servidor de logon. O aplicativo WinHTTP é notificado sobre o código 401 status enviado pelo servidor de logon para solicitar credenciais de usuário. No entanto, para o aplicativo, ele aparece como se o 401 status se originasse 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 lidar com a autenticação do Passport com o mesmo código que manipula outros esquemas de autenticação.

Normalmente, um aplicativo WinHTTP responde a um código 401 status 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 logon, não para o servidor indicado na solicitação.

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

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

Observação

O WinHTTP permite desabilitar o redirecionamento automático chamando a função WinHttpSetOption para o sinalizador WINHTTP_OPTION_DISABLE_FEATURE e especificando um valor de WINHTTP_DISABLE_REDIRECTS. Desabilitar o redirecionamento não interfere no 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, depois que a autenticação do Passport for concluída, um redirecionamento implícito deverá ocorrer da URL do servidor de logon do Passport de volta para a URL original. Esse redirecionamento não é disparado por uma resposta HTTP 302, mas está implícito no protocolo Passport.

O WinHTTP manipula 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 volte para a URL original após a autenticação, o aplicativo deve registrar uma função de retorno de chamada usando WinHttpSetStatusCallback. O WinHTTP pode notificar o aplicativo com um retorno de chamada WINHTTP_CALLBACK_STATUS_REDIRECT, o 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 este redirecionamento de caso especial.

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

Passport Cobranding

Ao contrário dos esquemas de autenticação tradicionais compatíveis com o WinHTTP, o Passport pode ser amplamente cobrandado. Ao receber um código 401 status que indica um desafio, um aplicativo pode recuperar o elemento gráfico e o texto da comarcação. Recupere uma URL para o gráfico de cobranding chamando WinHttpQueryOption com o sinalizador WINHTTP_OPTION_PASSPORT_COBRANDING_URL. Recupere o texto de comarcação 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 Armazenados e Senhas. Se as credenciais do Passport de um usuário forem salvas por meio do Assistente de Registro de Passaporte ou da caixa de diálogo de credencial padrão, elas serão salvas nos Nomes de Usuário Armazenados e Senhas. Ao usar WinHTTP no Windows XP ou posterior, o WinHTTP usará automaticamente as credenciais nos Nomes de Usuário Armazenados e Senhas se as credenciais não forem 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 política de logon automático.

Desabilitando a autenticação do Passport

Alguns aplicativos podem exigir a capacidade de desabilitar a autenticação do Passport. Por exemplo, quando uma afiliada do Passport responde com o código inicial 302 status, talvez seja preferível seguir o redirecionamento indicado e renderizar a página de autenticação do Passaporte HTML em vez de permitir que o WinHTTP manipule a autenticação internamente. A autenticação do Passport está desabilitada no WinHTTP chamando a função WinHttpSetOption com a opção WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH e passando o valor WINHTTP_DISABLE_PASSPORT_AUTH. Posteriormente, ele pode ser habilitado novamente 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ções de configuração do Passport usadas para teste

O WinHTTP depende das informações de configuração baixadas do servidor nexus do passport para dar 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 "dinâmica". O formato das informações é um cabeçalho HTTP personalizado "PassportURLs", seguido por pares de atributo-valor delimitados por vírgulas.

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 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 "dinâmica" alterando as configurações apropriadas do Registro 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, o WinHTTP não contatará o servidor nexus para obter outros valores de configuração. Nesse caso, LoginServerRealm e ConfigVersion também devem ser definidos por meio do registro para corrigir valores.

Um aplicativo pode, para fins de teste, ser necessário para baixar a configuração de 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