Я использую Owin для настройки моего приложения ASP.NET MVC 5 (.NET 4.5, IIS 7/8) для аутентификации против сторонней настройки ADFS:
app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
});
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
Wtrealm = Settings.Auth.Wtrealm,
MetadataAddress = Settings.Auth.MetadataAddress
});
У меня также есть собственный фильтр проверки подлинности (используется в сочетании с AuthorizeAttribute
):
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)
{
}
}
Это работает в течение половины времени, но иногда, при первоначальном входе в систему, между приложением и логином ADFS будет возникать цикл переадресации. Это похоже на специфику сеанса (не выполняется для всех пользователей одновременно), и как только цикл перенаправления происходит, он, кажется, продолжает происходить до обновления пула приложений.
Когда возникает цикл перенаправления, я все еще вижу (на вкладке "Сеть Chrome" ), что похоже на действительный токен, выдаваемый ADFS.
Мне сложно изолировать основную причину, но я обнаружил, что - когда цикл не встречается, user.Identity
имеет тип ClaimsIdentity
и IsAuthenticated
is true
. Когда это происходит, IsAuthenticated
есть false
, но user.Identity
имеет тип WindowsIdentity
.
Все формы аутентификации в IIS - кроме Аноним - отключены. IIS Express нигде не используется.
Что может быть причиной этого?