问题标签 [formsauthenticationticket]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - FormsAuthentication.SignOut() 不会使 FormsAuthenticationTicket 过期
首先,这不是 ASP.NET 会话未到期的问题,我们在注销时清除、放弃和删除每个 cookie。
这是关于 FormsAuthentication.SignOut() 在调用时不会使票证过期,并允许复制 cookie 内容的人在其他地方手动创建 cookie,并且仍然能够访问现在应该在注销后被阻止的所有内容。
以下是我们注销方法的要点:
我们还让 ASP 管理票证的创建和通过我们的 Web.config 和其他任何管理 FormsAuthentication 的身份验证。这是配置中的内容:
现在,为什么这是一个问题?很简单,这是一个安全问题,就像有人获取 cookie 并使其保持活动状态一样,他们可以访问匹配 cookie 的用户可以访问的任何内容,即使用户已断开连接。
是否有强制 FormsAuthenticationTicket 过期的正确方法?我尝试解密它,但一切都是只读的,我还尝试创建一个新的过期票并对其进行加密,但它不会覆盖旧票。
谢谢
版本:.NET 4.5.1、ASP.NET(非核心)
asp.net - Chrome 未在后续 API 请求中发送 FormsAuthentication cookie
我可以在其中一个请求中看到表单身份验证 cookie 作为响应返回,但是它不是由 Chrome 在后续 API 请求中发送的,这会导致这些请求失败,即发回 401 Unauthorized。这只发生在 Chrome 中的少数最终用户身上。大多数受影响的用户能够在 IE 中使用该应用程序而不会出现任何问题。
asp.net - 保存了一个不可读的 FormsAuthenticationTicket。有什么办法可以从服务器端清除?
当用户登录我们的站点时,会创建一个 FormsAuthenticationTicket。最近,我们进行了更改,将加密字符串添加为票证名称的一部分。事实证明,某些字符串在加密时变得无法被 IIS 读取,并且当受影响的用户登录时会引发此错误:
System.ArgumentException:值不在预期范围内。
堆栈跟踪:[ArgumentException:值不在预期范围内。] System.Web.Hosting.IIS7WorkerRequest.SetPrincipal(IPrincipal user) +11710943 System.Web.Security.FormsAuthenticationModule.OnAuthenticate(FormsAuthenticationEventArgs e) +379 System.Web。 Security.FormsAuthenticationModule.OnEnter(Object source, EventArgs eventArgs) +102 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +142 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +75 System.Web。 HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +93
该问题已修复,但受影响的用户需要清除其 ASPXAUTH cookie 才能再次登录。我们不知道有多少用户受到影响。但是,我们希望能够让他们在不清除 cookie 的情况下再次登录。
我尝试了几种解决方案来使会话令牌服务器端无效,但没有任何成功。我将代码添加到 Global.asax 以尝试在它出错之前捕获它,但是错误似乎来自 IIS,甚至在它到达我们的代码之前。在调试时,它在弹出错误之前从未命中 Global.asax 中的任何断点。我已经尝试过以下方法:Application_AuthenticateRequest Application_AcquireRequestState Session_OnStart Application_Start
我打算尝试一种类似于此处找到的解决方案:
https://www.jitbit.com/alexblog/282-invalidating-aspnet-forms-authentication-tickets-server-side/
并且只是使早于修补程序日期的令牌无效。但是,如果 IIS 在尝试读取票证时抛出错误,我似乎无法检查票证的日期。
我们将会话令牌保存在数据库中。我尝试在我们的测试服务器上清除那些,即使这样也没有解决它。编辑:我还尝试回收应用程序池,移动到另一个应用程序池,并执行 iisreset。
有没有办法告诉客户端浏览器扔掉一个cookie?我尝试过的基于代码的解决方案没有奏效,那么有没有办法从 IIS 中做到这一点?或者可能在错误到达客户端之前捕获错误并使令牌无效?
session-cookies - Persistent Cookie (4728) 如何将 .ASPXAUTH cookie 设置为会话 cookie?
我在使用扫描软件时遇到了中等安全问题 [Cookie 安全性:持久性 Cookie (4728)]
看来我使用了持久性cookie。我发现一些答案告诉不要设置过期,但我正在使用System.Web.Security。因此我必须将过期设置如下,否则课程会出错。FormsAuthenticationTicket.cs 是一个临时类,我无法编辑该类。
有没有办法将 .ASPXAUTH cookie 设置为会话 cookie?
不管 authTicket.expiration 是 30 分钟还是 1 小时,ASPXAUTH cookie 的到期时间仍然是一天。如何让它发挥作用?
我设置了 IIS 并将 cookie 的过期时间设置为 30 分钟,cookie 会在正确的时间消失,但浏览器 cookie 的过期时间仍然是一天。
这是我的 FormsAuthenticationTicket 代码:
控制器:
网络配置:
全球.asax:
这是我的 IIS 设置