我正在使用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
为true
。当它发生时,IsAuthenticated
为false
,但user.Identity
的类型是WindowsIdentity
。
IIS中除匿名以外的所有身份验证都已禁用。 IIS Express在任何地方都没有使用。
这可能是什么原因呢?
CookieAuthenticationOptions.CookieManager
仅在 Microsoft.Owin.Security.Cookies v3.0.0 及以上版本中可用。请留意。 - Dunc