asp.net – 太多的Cookie OpenIdConnect.nonce导致错误页面“错
我在C#ASP MVC Web应用程序中使用OWIN / OAuth与OpenId Connect身份验证(Microsoft.Owin.Security.OpenIdConnect).使用Microsoft帐户的SSO登录基本上可以工作,但是不时会在浏览器上显示错误请求 – 请求太长的错误页面.
我发现这个错误是由于太多的cookie造成的.删除Cookie可以帮助一段时间,但过了一会儿问题回来了. 导致问题的cookie是从OpenId框架设置的,所以有几十个cookie,名字叫OpenIdConnect.nonce.9oEtF53WxOi2uAw …….. 这不是SPA应用程序,但是某些部分会使用ajax调用定期刷新. 解决方法
原来,根本原因是Ajax调用.
有问题的流程是 1)OAuth cookie在一段时间后过期 2)到期通常会将页面重定向到login.microsoft.com来刷新cookie.在此步骤中,OAuth框架将新的nonce cookie添加到响应(每次)! 3)但是Ajax不处理域外的重定向(跨域到login.microsoft.com).但是cookie已经附加到页面. 4)下一次定期的Ajax电话重复,导致“nonce”cookie快速增加. 解 我不得不扩展“OWIN OpenId”框架设置代码,以不同方式处理Ajax调用,以防止重定向并停止发送Cookie. public void ConfigureAuth(IAppBuilder app) { app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); app.UseCookieAuthentication(new CookieAuthenticationOptions()); app.USEOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = clientId,Authority = authority,Notifications = new OpenIdConnectAuthenticationNotifications { RedirectToIdentityProvider = ctx => { bool isAjaxRequest = (ctx.Request.Headers != null && ctx.Request.Headers["X-Requested-With"] == "XMLHttpRequest"); if (isAjaxRequest) { ctx.Response.Headers.Remove("Set-Cookie"); ctx.State = NotificationResultState.HandledResponse; } return Task.FromResult(0); } } }); } Ajax调用者也必须进行调整,以检测401代码并执行全页刷新(这导致对Microsoft权限的快速重定向). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC在自定义操作过滤器中查找当前用
- ASP.NET MVC2与实体框架4 – AsEnumerable()或ToList()在存
- asp.net-mvc – MVCGrid.Net排序问题 – sortdirection
- asp.net-mvc – 如何将NUnit作为ASP.NET MVC的测试框架选项
- asp.net – 堆栈溢出原因
- asp.net下经典数据库记录分页代码
- asp.net – 从1.7到1.9的迷你探查器升级破坏了现有代码
- asp.net webservice处理gzip压缩请求
- asp.net-web-api – ASP.NET WebAPI OData – 继承自Entity
- asp.net-mvc – 如何在Windows Azure网站(asp.net mvc4)上更
- ASP.NET MVC 3 Ajax.BeginForm和Html.TextBoxFor
- asp.net – MVC3 – 向控制器添加一个文件夹?
- asp.net-mvc – 使用mvc 4 razor引擎显示3个文本
- asp.net – Web.config身份验证错误
- asp.net-mvc – OAuth 2 Google API刷新令牌为空
- asp.net – UpdatePanel没有名为’TextBox’的公
- asp.net-mvc – Visual studio – 预编译 – 无点
- asp.net – RegisterStartupScript不适用于Scrip
- asp.net – Docker日志中的.net输出
- asp.net-mvc-4 – 如何使用ASP.NET MVC在Kendo U