Logout único
Atualizado: 19 de junho de 2015
Aplica-se ao Azure
Microsoft Azure Active Directory Controle de Acesso (também conhecido como Serviço de Controle de Acesso ou ACS) agora inclui uma funcionalidade opcional de logon único para complementar o logon único. O resultado é uma experiência completa e consistente de logon e de saída para usuários de aplicativos baseados na Web integrados ao ACS.
Quando um usuário final faz logout em um aplicativo de terceira parte confiável que aceita logon único, o ACS pode automaticamente desconectar o usuário do site do provedor de identidade e de todos os outros aplicativos aos quais se conectou usando esse provedor de identidade. Da mesma forma, se o cliente fizer logout no site do provedor de identidade, o ACS poderá automaticamente desconectar o cliente de outros aplicativos que usam o provedor de identidade.
Este tópico explica como o logout único funciona e como implementá-lo para seu aplicativo de terceira parte confiável. Examine o código de exemplo para implementar a saída única federada em um aplicativo ASP.NET MVC 4 no Exemplo de Código: ASP.NET MVC 4 com a Saída Federadat.
Requisitos do Sistema
Para implementar o logout único, é preciso ter as ferramentas e os serviços a seguir.
Assinatura do Azure
Visual Studio 2012
Sobre o logout único
Em cada sessão do navegador, o cliente pode selecionar um provedor de identidade federado para entrar em um aplicativo de terceira parte confiável. Com o logout único, quando o usuário sai do provedor de identidade ou do aplicativo de terceira parte confiável, ele é automaticamente desconectado de todos os aplicativos de terceira parte confiável aos quais se conectou usando o mesmo provedor de identidade.
Por exemplo, o cliente usa uma conta da Microsoft (Windows Live ID) para entrar em três aplicativos de terceira parte confiável integrados ao ACS. Quando o cliente sai de um dos aplicativos, ele é automaticamente desconectado de sua conta da Microsoft e dos outros dois aplicativos.
Suporte total ao logout único está disponível para provedores de identidade de WS-Federation e ADFS personalizados. O suporte limitado de saída única está disponível para o Facebook, Google, conta da Microsoft e Yahoo! provedores de identidade. Esses provedores de identidade não podem iniciar a saída única. No entanto, quando um aplicativo de terceira parte confiável inicia a saída única, o cliente é desconectado desses provedores de identidade e os aplicativos de terceira parte confiável associados aos quais eles assinaram usando esse provedor de identidade.
Como o logout único funciona
O logout único pode ser iniciado pelo provedor de identidade ou pelo aplicativo de terceira parte confiável. Nesta seção, analisamos cada um desses processos de logout e explicamos como é possível habilitar o logout único para seu aplicativo de terceira parte confiável.
Aplicativo de terceira parte confiável inicia o logout
Para iniciar o logout único quando um usuário sai de seu aplicativo de terceira parte confiável, envie uma URL com os parâmetros a seguir para o ponto de extremidade de WS-Federation do ACS.
wa: Set to wsignout1.0
wreply: defina o valor como a URL da página de logoff, ou seja, a página em que o usuário é redirecionado quando a saída é concluída. Esse valor deve ser a parte do nome de domínio RP, como "https://RP.com/"
wtrealm: defina como o valor da propriedade Realm do aplicativo de terceira parte confiável no Portal de Gerenciamento do ACS.
Este é um exemplo de URL para logout único.
https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=<YourAppRealm>&wreply=<YourAppRealmLogoutPage>
Por exemplo:
https://Fabrikam.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=" https://www.fabrikam.com/" &wreply= https://www.fabrikam.com/logout
Para obter um código de exemplo que implementa a saída única iniciada por terceira parte confiável, consulte o Exemplo de Código: ASP.NET MVC 4 com Saída Federada. Este exemplo inclui código em LogoutController.cs que obtém os valores wreply e wrealm e cria uma instância da classe SignOutRequestMessage.
Quando o ACS recebe a URL de saída, o ACS encerra a sessão do cliente com o provedor de identidade enviando uma solicitação wsignout1.0 . Em seguida, o ACS envia mensagens wsignoutcleanup1.0 para outros aplicativos de terceira parte confiável que o usuário assinou usando o provedor de identidade.
Provedor de identidade inicia o logout
O suporte do logout iniciado pelo provedor de identidade só é aceito para provedores de identidade de WS-Federation e ADFS personalizados. Não há suporte para provedores de identidade de conta da Microsoft (Windows Live ID), Google, Yahoo! e Facebook porque eles não notificam o ACS ou o aplicativo de terceira parte confiável quando o usuário faz logout.
Quando o usuário sai de um provedor de identidade do WS-Federation ou do ADFS, o provedor de identidade envia ao ACS uma mensagem de solicitação de limpeza de logon wsignoutcleanup1.0 com o seguinte formato: https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignoutcleanup1.0
Quando o ACS recebe uma mensagem wsignoutcleanup1.0 , verifica se a solicitação se originou do mesmo ponto de extremidade da solicitação de entrada validando o referenciador no cabeçalho HTTP da mensagem: <Referrer>: https://CustomIDP
em que o valor de <Referenciador> é o valor do referenciador na URL de entrada no cookie ACSSignOut .
Em seguida, o ACS envia uma mensagem wsignoutcleanup1.0 para todos os aplicativos de terceira parte confiável na sessão do navegador cliente do usuário atual que estão associados ao provedor de identidade. O processo assemelha-se ao descrito na seção “Aplicativo de terceira parte confiável inicia o logout”. O provedor de identidade pode redirecionar o navegador para uma página de logout que ele controla a fim de concluir o processo de logout.
Processo de logout único
Esta seção descreve cada etapa do processo de logout único. Como o ACS trata dos detalhes, você não precisa entender esse processo. No entanto, pode ser útil para fins de personalização ou depuração.
Passo a passo do logout único
Quando o ACS recebe uma solicitação de logon1.0 em seu ponto de extremidade WS-Federation, o ACS procura o provedor de identidade do iniciador de solicitação de saída no cookie ACSSignOut.
O ACS usa as regras de correspondência a seguir para identificar o provedor de identidade.
Se o parâmetro wtrealm for especificado na solicitação de saída, o ACS pesquisará o valor wtrealm na lista de partes confiáveis para cada provedor de identidade.
Se wtrealm não for especificado e houver apenas uma entrada de provedor de identidade no cookie ACSSignOut, o ACS usará o provedor de identidade no cookie ACSSignOut.
Caso contrário, o ACS exibirá uma página de erro indicando que a tentativa de saída falhou porque o parâmetro wtrealm está ausente.
O ACS envia uma mensagem de logon1.0 para o provedor de identidade apresentando uma página com um elemento iframe> (<quadro embutido). O ACS também adiciona <elementos iframe> que contêm a mensagem SignOutCleanup1.0 às páginas de todas as partes confiáveis WS-Federation ativas que não sejam a parte inicial e o ACS remove as partes confiáveis do cookie ACSSignOut .
A página que exibe o status de logout da terceira parte confiável também contém JavaScript que é executado por um tempo especificado e, em seguida, redireciona o navegador. Se um parâmetro wreply foi especificado no cookie ACSSignOut, o JavaScript redirecionará para o endereço indicado pelo valor wreply para concluir a saída. Caso contrário, o JavaScript redireciona para a URL de Retorno da terceira parte confiável, conforme especificado no Portal de Gerenciamento do ACS.
Cookie ACSSignOut
O ACS usa um cookie de sessão denominado ACSSignOut para registrar o provedor de identidade que autenticou o usuário no aplicativo. Você pode ver o cookie nos rastreamentos da sessão. O cookie de sessão tem o seguinte formato de nome: ACSSignOut.<YourACSNamespace>
.
O cookie ACSSignOut identifica o aplicativo de terceira parte confiável e o provedor de identidade que autenticaram o usuário. O ACS usa o cookie durante o logout único para garantir que o provedor de identidade correto seja desconectado e o usuário também seja desconectado de outros aplicativos que usam o provedor de identidade.
Limitações do logout único
Ao usar o logout único, lembre-se das limitações a seguir.
Somente provedores de identidade WS-Federation personalizados e provedores de identidade do ADFS podem iniciar a saída única. Provedores de identidade social, como Yahoo, Google, Conta da Microsoft (Windows Live ID) e Facebook, não notificam o ACS ou o aplicativo de terceira parte confiável quando o cliente sai do site do provedor de identidade. Portanto, os usuários de aplicativos de terceira parte confiável que utilizam esses provedores de identidade não são automaticamente desconectados quando o logout se origina no site do provedor de identidade.
O logout único pode não ser eficaz em todos os ambientes. Quando o ACS recebe uma única mensagem de saída de um aplicativo de terceira parte confiável, ele envia uma solicitação wsignout1.0 para o provedor de identidade e uma mensagem wsignoutcleanup1.0 para cada um dos outros aplicativos de terceira parte confiável. Quando o ACS recebe uma mensagem de solicitação wsignoutcleanup1.0 de um provedor de identificação, ele envia uma mensagem wsignoutcleanup1.0 para cada um dos aplicativos de terceira parte confiável. No entanto, o ACS não pode garantir que o provedor de identidade ou os aplicativos de terceira parte confiável responderão corretamente ao desconectar o usuário.
Quando os usuários se desconectam do provedor de identidade do Google no Internet Explorer, o navegador exibe um aviso "Somente o conteúdo seguro é exibido". Para concluir o logout, os usuários devem clicar em "Mostrar todo o conteúdo". Quando a saída é concluída, o navegador é redirecionado para a URL especificada pelo valor do parâmetro wreply .
O Internet Explorer 9, e versões posteriores do Internet Explorer, exibe o aviso ao encontrar conteúdo que não é seguro em alguma página segura, como imagens ou scripts originados de um servidor não seguro. Nesse caso, ele reage ao conteúdo seguro do ACS (HTTPS/SSL) e conteúdo não seguro (HTTP) do provedor de identidade. O ACS não pode mudar nem suprimir esse comportamento.
Os usuários podem suprimir o aviso, conforme descrito na notificação "Somente conteúdo seguro é exibido" no Internet Explorer 9 ou posterior. Porém, como essa configuração se aplica a todos os sites e pode deixar o computador do usuário vulnerável a conteúdo malicioso, é recomendável usar a configuração padrão, que bloqueia conteúdo não seguro (HTTP).
Para ajudar os usuários finais a iniciar o logout único, a página de logout do aplicativo da terceira parte confiável deve instruí-los a fechar o navegador e se desconectar explicitamente de outros aplicativos de terceira parte confiável e do site do provedor de identidade. Fechar uma guia, janela ou página do navegador não é suficiente. Se o computador for compartilhado ou estiver em local público, como em um quiosque, os usuários devem limpar o histórico do navegador antes de fechá-lo.
Consulte Também
Conceitos
Exemplo de código: ASP.NET MVC 4 com saída federada