带有 ASP.NET MVC 5 应用程序的 Microsoft 身份验证循环
Posted
技术标签:
【中文标题】带有 ASP.NET MVC 5 应用程序的 Microsoft 身份验证循环【英文标题】:Microsoft Authentication loop with ASP.NET MVC 5 application 【发布时间】:2018-11-24 09:37:09 【问题描述】:我在 Azure 上部署了一个 ASP.NET MVC 5 Web 应用程序,该应用程序存在身份验证循环。
一开始我发现这是一个HTTP
的问题,所以我从Azure 强制HTTPS
。问题消失了,但在部署后一段时间又出现了。再次部署(相同版本)解决了循环,该循环会在一段时间后返回。会是什么?我应该寻找什么?
到目前为止,我已尝试在我的 Web.config
中包含以下内容
<add key="owin:AppStartup" value="false"></add>
这在我的Startup.auth.cs
:
public void ConfigureAuth(IAppBuilder app)
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
CookieSecure = CookieSecureOption.SameAsRequest,
);
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
);
我通过使用组织帐户指定登录创建了 MVC 5 项目,并在部署配置文件中启用了相同的功能:
我不知道还有什么可以尝试的,帮助。
【问题讨论】:
信息不足。它是每次都为任何用户循环(一段时间后)还是只是有时为某人循环?尝试从一个新的隐身窗口开始并重新检查。您能否跟踪重定向并添加到问题中? 一段时间后,对于每个不再登录的用户。在每个浏览器中,隐身模式和普通模式都会循环。我会提供更多细节,但说真的,我不能把它缩小到一个模式,不是现在。所以问尽可能多的问题,也许它会给我指明正确的方向...... 尝试添加 app.Use((context, next) => context.Request.Scheme = "https"; return next(); );正如您所说,在 Azure 级别强制 https 会影响行为。 也尝试在 CookieAuthenticationOptions 和 OpenIdConnectAuthenticationOptions 中设置CookieManager = new SystemWebChunkingCookieManager()
正如您提到的身份验证循环会在一段时间后返回,可能是由于cookie过期时间引起的?能不能在本地正常工作?
【参考方案1】:
这里也一样,我没有这个选项。您只是无法重现此问题以找到确切原因。
这就是我在此期间所做的:
AuthStartup.cs:
app.UseCookieAuthentication(new CookieAuthenticationOptions() CookieSecure = CookieSecureOption.Never );
Global.asax.cs
protected void Application_BeginRequest(object sender, EventArgs e) if (!Request.IsSecureConnection) Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"] + httpContext.Current.Request.RawUrl);
覆盖授权属性:
public class AuthorizeFromHTTPAttribute: AuthorizeAttribute public override void OnAuthorization(AuthorizationContext filterContext) if (!filterContext.HttpContext.Request.IsSecureConnection) UriBuilder redirectUrl = new UriBuilder( filterContext.HttpContext.Request.Url); redirectUrl.Scheme = "HTTPS"; redirectUrl.Port = 443; filterContext.HttpContext.Response.Redirect(redirectUrl.ToString()); return; else base.OnAuthorization(filterContext);
从 Visual Studio 到 Azure 的新发布解决了一段时间。那么这是服务器端的东西吗??
Working InPrivate 或 InCongnito 也不能解决这个问题。或者清理你的 cookie...
【讨论】:
在使用自定义“SystemWebCookieManager”进行了一周的测试后,我希望它现在可以工作了 :-) 到目前为止,一切都很好,并且仍在工作......更多信息:link以上是关于带有 ASP.NET MVC 5 应用程序的 Microsoft 身份验证循环的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net MVC 5 动态创建按钮并调用带有参数的 javascript 函数
ASP.NET Core 5 MVC:在模态窗口之前验证表单
Asp.Net MVC 5 Jquery 验证不适用于带有提交事件的 ajax 帖子,显示为有效表单