ASP.NET Framework v4 App using OpenIDConnect and Session[] variables will not authenticate the second session(使用OpenIDConnect和SESSION[]变量的ASP.NET框架v4应用程序不会对第二个会话进行身份验证)
问题描述
我有一个.NET Famework 4.7.1 ASP.NET/MVC应用程序,我正在将其从SAML切换到新的OpenIDConnect身份提供程序。原始代码使用来自SAML提供程序的库,并使用Framework4.5。我升级到了4.7.1并添加了owin。
在我将该应用程序投入生产之前,一切似乎都运行得很好。那时,只有第一个登录的人才能进入。任何其他启动新会话的人都会被困在站点和IP之间的重定向循环中,直到随机数cookie填满请求并收到"请求太长"错误。
我已经使用此IP和ASP.NET框架设置了其他应用程序,并且我没有问题。此应用程序是Framework4.5,但从一开始就设计为使用OWIN和Kentor.AuthServicesfor SAML,并且向OpenIDConnect的转换非常顺利。
我和我的IP的支持关注了我的应用程序和IP之间的对话,令牌被正确地发回了。我在身份验证中添加了通知,并设置了断点。应用程序正在获取令牌并对其进行验证。
我尝试返回到Framework4.5,并将所有库设置为与其他正在运行的应用程序相同的版本。这不管用。
我最终找到了使用SESSION[]变量的原因。我还能够使用新的.NET ASP.NET应用程序重现此问题。
- 创建不带身份验证的新"ASP.NET Web应用程序"框架4.7.1。(您可以从他们的身份验证开始,但无济于事)
- 安装NuGet包"Microsoft.Owin.Host.SystemWeb"(v4.0.0.0)
- 安装NuGet包"Microsoft.Owin.Security.OpenIdConnect"(v4.0.0.0)
- 安装NuGet包"Microsoft.Owin.Security.Cookies"(v4.0.0.0)
创建Startup.cs
使用Microsoft.Owin; 使用OWIN; 使用制度; 使用Microsoft.Owin.Security.Cookies; 使用System.Configuration; 使用系统.Collections.Specialized; 使用Microsoft.Owin.Security.OpenIdConnect; 使用Microsoft.IdentityModel.Protocols.OpenIdConnect; 使用Microsoft.Owin.Security; [组件:OwinStartupAttribute(typeof(WebApplication.Startup))] 命名空间WebApplication { 公共部分类启动 { 公共无效配置(IAppBuilder应用程序) { App.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions{}); app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = "{clientid}", Authority = "{IP authority}", ResponseType = OpenIdConnectResponseType.CodeIdTokenToken, Scope = OpenIdConnectScope.OpenIdProfile + " " + OpenIdConnectScope.Email, }); } }
}
修改HomeController.cs
公共类HomeController:控制器 { 公共动作结果索引() { 返回视图(); )
public ActionResult About() { ViewBag.Message = "Your application description page."; // Added this line **************** Session["Value"] = "Test Value"; return View(); } // Added this line **** [Authorize] public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); }
}
要显示问题,请执行以下步骤
- 运行Web应用程序并转到联系人页面。您要么已经通过身份验证,要么需要登录。
- 打开另一个浏览器或私人/隐姓埋名页面,以便获得新会话并打开站点。转到联系人页面。您需要重新登录。
您可以看到身份验证对两个会话都有效。
- 关闭第二个浏览器/私人/匿名窗口。
- 返回到第一个浏览器并转到"关于"页。这是具有Session[]赋值的页面
- 打开新的浏览器/私人/匿名窗口。返回到站点上的联系人页面。系统将再次要求您进行身份验证。
在您进行身份验证后,浏览器将开始站点和您的IP身份验证之间的重定向循环。
无论[Authorize]属性在控制器上还是在操作上都无关紧要。 OpenIdConnect选项中是否分配了客户端机密并不重要。 我向另一个正在运行的应用程序添加了一个SESSION[]变量,但它开始出现相同的问题。
除了删除所有会话[]变量之外,是否可以执行其他操作来停止此行为?
我知道这是一篇很长的文章。感谢你从头到尾阅读和 感谢您的帮助。
推荐答案
一位同事发现了此帖子。
ASP.NET_SessionId + OWIN Cookies do not send to browser
有几个关于备用Cookie管理器的答案。来自Anders Abel的post在我的测试应用程序中工作。我将在那里探索更多的答案。
这篇关于使用OpenIDConnect和SESSION[]变量的ASP.NET框架v4应用程序不会对第二个会话进行身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用OpenIDConnect和SESSION[]变量的ASP.NET框架v4应用程序不会对第二个会话进行身份验证
基础教程推荐
- c# Math.Sqrt 实现 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30