我在我的应用程序中使用Microsoft.Owin.Security(.NET 4.5上的ASP.NET MVC v 5.2.0).但只是OWIN的安全部分没有别的.当用户想要访问本地受保护的URL时,请求将被重定向到登录页面.但是当我在服务器上发布应用程序时,我得到这个窗口而不是重定向:
public void LogIn(long userId,string username,string email,bool persistent) { var claims = new List<Claim>{ new Claim(ClaimTypes.NameIdentifier,userId.ToString(CultureInfo.InvariantCulture)),new Claim(ClaimTypes.Name,username),new Claim(ClaimTypes.Email,email),new Claim(ClaimTypes.IsPersistent,persistent.ToString()) }; var id = new ClaimsIdentity(claims,DefaultAuthenticationTypes.ApplicationCookie); var ctx = HttpContext.Current.Request.GetOwinContext(); var authenticationManager = ctx.Authentication; authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); authenticationManager.SignIn(new AuthenticationProperties { IsPersistent = persistent },id); } public void logout() { var ctx = HttpContext.Current.Request.GetOwinContext(); var authenticationManager = ctx.Authentication; authenticationManager.SignOut(); }
这是我的创业公司:
public partial class Startup { public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,LoginPath = new PathString("/account/log-in/"),AuthenticationMode = AuthenticationMode.Active,CookieHttpOnly = true,CookieName = ".some-cookie-name",ExpireTimeSpan = TimeSpan.FromDays(1),logoutPath = new PathString("/account/log-out/"),SlidingExpiration = true,ReturnUrlParameter = "continue" }); } }
我在global.asax :: Application_Start方法中也有这一行:
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
和web.config中的这些配置:
<system.web> <authentication mode="None" /> <httpModules> <remove name="FormsAuthenticationModule" /> <remove name="RoleManager" /> </httpModules> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="false"> <remove name="FormsAuthenticationModule" /> <remove name="RoleManager" /> </modules> </system.webServer>
最后我在使用IIS 7.5的Windows 2008 R2计算机上运行该应用程序.您知道我应该怎样做才能使OWIN在我的服务器上正常工作,就像我的本地一样?
更新:要明确:
假设我有这些行动:
[AllowAnonymous] public ActionResult AnonymousAction() { } [Authorize] public ActionResult UsersAction() { }
一个用于匿名用户,另一个用于登录用户(具有良好的属性装饰).匿名用户可以轻松访问AnonymousAction而不会出现任何错误或错误行为.但是当他们(我的意思是匿名用户)想要访问UsersAction时,他们将看到我上面提到的窗口而不是被重定向到登录页面.