第一次外部登录尝试重定向回登录操作,第二次登录操作
我在我的ASP.Net MVC 5 / WebApi 2项目中使用OWIN的外部认证提供程序,我遇到了一个奇怪的问题。
登录工作流程就像在SO上一样。 用户点击登录页面,选择提供商并登录。我的问题是,首次点击提供商会重定向回相同的登录页面:
http://localhost:57291/Account/Login?ReturnUrl=%2fAccount%2fExternalLogin
如果ExternalLogin操作缺少AllowAnonymous属性,这将有意义。
当用户第二次点击时一切正常。
我也尝试过使用不同的浏览器,问题在Chrome,IE11和Firefox中都是一致的。
Login.cshtml:
@using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = ViewBag.ReturnUrl })) { }
AccountController.cs
public class AccountController : Controller { ... [AllowAnonymous] [HttpPost] public ActionResult ExternalLogin(string provider, string returnUrl) { return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { loginProvider = provider, ReturnUrl = returnUrl })); } ... }
ChallengeResult.cs:
public class ChallengeResult : HttpUnauthorizedResult { public ChallengeResult(string provider, string redirectUrl) { LoginProvider = provider; RedirectUrl = redirectUrl; } public string LoginProvider { get; set; } public string RedirectUrl { get; set; } public override void ExecuteResult(ControllerContext context) { context.HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = RedirectUrl }, LoginProvider); } }
FilterConfig.cs
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); // make all api controllers secure by default filters.Add(new AuthorizeAttribute()); } }
事实certificate,我的项目最初是作为一个MVC 4应用程序开始的,它在web.config中导致了这个问题:
我认为OWIN和Forms身份validation同时处于活动状态。
我有同样的问题,当我将ASPNet.Web.Pages.Web.Data 3.1.1 nuget更新到任何更高版本时发生。 随着3.1.1它是有效的! 我在这里找到了解决方案。
随着表单身份validation的添加,我被重定向到登录页面。 因此,删除此代码有帮助
但我也必须添加这一行
<-- added this line to remove it completely -->
希望这有助于某人。
- Service Stack / MVC:“AppHostBase.Instance已设置”错误 – 但无法理解为什么/如何防止
- DropCreateDatabaseAlways种子未调用
- SignalR Context.User.Name返回空
- MVC 4表单身份validation无法与一起使用
- ASP.NET MVC:Tabs ASCX – 根据当前页面调整CSS类?
- Asp.net mvc 4 – 需要使用会话但不能使用cookie
- 如何在MVC 5中设置自定义ClaimsPrincipal?
- 我应该如何根据用户设置加载CSS样式?
- 要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例