Loops de redirecionamento intermitente durante a autenticação do ADFS
Estou usando o Owin para configurar meu aplicativo ASP.NET MVC 5 (.NET 4.5, IIS 7/8) para autenticar em uma instalação de ADFS de terceiros:
app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
});
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
Wtrealm = Settings.Auth.Wtrealm,
MetadataAddress = Settings.Auth.MetadataAddress
});
Eu também tenho um filtro de autenticação personalizado (usado em conjunto comAuthorizeAttribute
):
public class OwinAuthenticationAttribute : ActionFilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
var user = filterContext.RequestContext.HttpContext.User;
var authenticated = user.Identity.IsAuthenticated;
if (!authenticated)
{
return;
}
/* Redirect to profile setup if not already complete */
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
}
}
Isso funciona bem na metade do tempo, mas às vezes, no login inicial, um loop de redirecionamento ocorre entre o aplicativo e o login do ADFS. Isso parece ser específico da sessão (não ocorre para todos os usuários de uma vez) e, uma vez que o loop de redirecionamento ocorre, ele continua ocorrendo até a atualização de um pool de aplicativos.
Quando o loop de redirecionamento ocorre, ainda consigo ver (na guia Rede do Chrome) o que parece um token válido sendo emitido pelo ADFS.
Estou tendo dificuldades para isolar a causa raiz, mas o que descobri é que, quando o loop não ocorre,user.Identity
é do tipoClaimsIdentity
eIsAuthenticated
étrue
. Quandofaz ocorrer,IsAuthenticated
éfalse
masuser.Identity
é do tipoWindowsIdentity
.
Todas as formas de autenticação no IIS - exceto Anonymous - estão desativadas. O IIS Express não está em uso em nenhum lugar.
O que poderia estar causando isso?