除非在Web.Config

时间:2017-04-07 15:38:33

标签: c# asp.net-mvc authentication asp.net-identity owin

我在我的MVC应用程序中使用ClearTrust SSO。这意味着服务器提供了一个我可以访问的变量:Request.ServerVariables["HTTP_CT_REMOTE_USER"]

使用该变量,我可以在Global.asax文件中的Session_Start期间登录用户。但是,在尝试清理我的web.config后,我遇到了一个问题。我们正在使用带有CookieAuthentication的Owin身份验证。

如果我从我的Web.config中的system.web中删除它:

<authorization>
   <deny users="?" />
</authorization> 

然后用户被Owin中间件重定向到他们永远不会看到的登录页面,因为我在上面提到的变量和他们的用户名总是可以在Session_Start期间登录。

我尽可能地使用断点跟踪代码,无论web.config是否包含该部分,此代码都会在第一个请求时触发,该请求会将用户登录到站点中:

var signInManager = HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);

不同之处在于,如果没有该授权部分,Owin会捕获未经过身份验证的请求,但会以某种方式将用户当前请求标记为已通过身份验证(不会将重定向返回到同一页面)。当Owin将它们重定向到登录页面时,他们显然会看到一个登录页面,但他们已登录到该站点。

通过将以下代码添加到AccountController登录,可以轻松解决这个问题,但我真的很好奇它为什么会发生......

if (Request.IsAuthenticated)
{
    return RedirectToLocal(returnUrl);
}

编辑:忘记提及我删除该代码的原因,我认为没有必要,因为我在需要时使用全局AuthorizeAttribute过滤器和AllowAnonymous。

0 个答案:

没有答案