Identity server - loop infinito redirecionamento

  • Rafael Miceli
  • 20 Jul 2016

Um dos problemas mais comuns que vejo (e já tive) ao configurar Oauth identity server é um redirecionamento infinito em loop ao tentar efetuar seu login usando os flows Implicit ou AuthorizationCode ou Hybrid.

Este post vai sendo atualizado com o tempo, já que existem diversos fatores que podem influenciar seu loop infinito e não tenho como descrever todos aqui.

Já existe muita documentação¹ do time do IdentityServer em cima disso. Neste post vou explicar de uma forma mais simples as causas.

Causas para e esse problema

Um dos motivos para esse problema acontecer é seu Authorization Server estar gerando o cookie em HTTP e seu Client aceitar apenas Cookies vindo de HTTPS.

Demonstrando um exemplo de como isso ocorre:

Repare no startup.cs que o CookieAuthenticationOptions só aceita cookies em HTTPS!

app.UseCookieAuthentication(new CookieAuthenticationOptions
    {  
        AuthenticationType = "Cookies", 
        CookieSecure = CookieSecureOption.Never
    });

Isso por causa da opção CookieSecure = CookieSecureOption.Never.

Se seu Authorization Server estiver em HTTP, logo ele está emitindo o token no protocolo HTTP. Com isso seu Client nunca vai conseguir armazenar o cookie uma vez que o token vem do protocolo HTTP.

Resolver esse problema

Para resolver, a MELHOR forma é colocar seu Authorization Server em HTTPS.

É extremamente inseguro que seu Authorization Server não esteja em HTTPS, pois você pode acabar sofrendo um ataque Man in the Middle

Para colocar em HTTPS você precisar de um certificado emitido por uma CA(Certificate Authority) e isso fica para um outro post, pois merece um tópico próprio, já que não é algo tão trivial.

A maneira não recomendada para resolver isso, é apenas remover a opção CookieSecure, que ai, você consegue receber seus tokens em HTTP, (MAS NÃO FAÇA ISSO EM PRODUÇÃO)!!!

Finalizando

Como disse no começo este post vai ser atualizado com o tempo, com isso aguardem por atualizações neste cara!

Referências

[¹] documentação de issues referente a loops infinitios:

https://github.com/IdentityModel/Thinktecture.IdentityModel/issues/56

https://github.com/IdentityServer/IdentityServer3/issues/294

https://github.com/IdentityServer/IdentityServer3/issues/1656

comentarios com Disqus Disqus