我有一个MVC 4应用程序并将其转换为MVC 5,希望使用OWIN中间件。
我成功更新到MVC 5并在本文http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux中实现了OWIN。
当我访问应用程序主页时,我被重定向到指定的登录URL,然后它再次开始重定向到登录URL,直到浏览器以重定向循环错误结束尝试。
即使没有设置Authorize属性,我的登录控制器似乎也需要进行身份验证。我尝试添加AllowAnonymous属性,但没有变化。
我不知道如何调试OWIN正在做什么,我在整个应用程序中设置了几个断点,似乎我的代码永远不会被访问,所以重定向必须发生在中间件级别。
这是我在启动类中的OWIN配置:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/login"),
LogoutPath = new PathString("/sign-out"),
SlidingExpiration = true,
ExpireTimeSpan = new TimeSpan(0,30,0),
AuthenticationMode = AuthenticationMode.Active
});
当我选择被动模式时,我只会收到未经授权的错误页面,不会发生重定向。
知道如何在我的场景中继续进行吗?有没有办法调试正在发生的事情?
感谢您的帮助,
Vilem
答案 0 :(得分:3)
我也在关注你提到的文章,但我发现自己处于重定向循环中,尽管我的代码与文章代码匹配。
我在此处提示http://forums.asp.net/t/1960987.aspx?After+converting+MVC+4+project+to+MVC+5+I+am+getting+an+error+this+website+has+redirect+loop+后修复了我的重定向,建议IIS Express在本地配置文件中保存特定于站点的身份验证设置。
如果您正在使用不同的身份验证设置,IIS Express 在其配置文件中存储了其他身份验证设置。 类似的东西:
<location path="WebApplication1">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
配置位于用户的文档文件夹
中文档\ IISExpress \配置\
你应该寻找
对ApplicationHost.config
然后只需删除&#39; location&#39; xml节点
亚当
答案 1 :(得分:2)
我疯了1天,最后我创建了一个新项目并一次报告一个视图,然后一个控制器一次报告错误。
我发现在“布局”页面中,有一些需要身份验证的操作,这导致了重定向。
For example:
<a href="@Html.Action("Create","ads")" class="btn btn-primary navbar-btn btn-sm">
我已改为:
<a href="/Create/ads" class="btn btn-primary navbar-btn btn-sm">
答案 2 :(得分:0)
编辑: 在稍后的调查中,该问题是由“SecuritySwitch”插件引起的。我不得不完全删除它,似乎它根本不适用于MVC5 + Owin。
ORIGINAL: 我通过安装Visual Studio 2013试用版(我正常使用2012)并使用个人用户帐户身份验证模板集创建新的MVC5项目来解决这个问题。
然后我开始将我的代码从有问题的项目逐个迁移到这个,希望找到突破点。我没有找到任何代码,当我完全迁移它时,我的代码就像我想要的那样工作。
显然这不是一个真正的解决方案,但它完成了工作。简单地从头开始构建项目可以节省数小时/天的麻烦。