gpt4 book ai didi

asp.net-mvc - 为什么 WebSecurity.Logout *立即*将 IPrincipal.User 更新为空用户

转载 作者:行者123 更新时间:2023-12-03 01:04:46 25 4
gpt4 key购买 nike

首先需要注意的是,在我的应用程序中,如果您注销,您的 session 仍然有效,并且您不仅会被重定向回登录页面,还会停留在同一页面上。

话虽如此 - 无论我使用这两种方式在 MVC 应用程序中注销

FormsAuthentication.SignOut()
WebSecurity.Logout()

效果是相同的,如果我立即访问它们,以下属性都不会更改以反射(reflect)注销:

User.Identity.Name
Thread.CurrentPrincipal.Identity

现在 - 如果我执行重定向,或者只是重新加载页面,那么显然这些属性将更新为空用户。它们只是并不立即意味着 User.Identity.Name 代表刚刚注销的用户。

这是一个问题,因为我想在登录/注销后生成您以 XXX 身份登录 形式的文本 - 这可能是在无法重定向的 AJAX 情况下。

我很好奇是否有任何方法可以触发 IPrincipal 在注销(或登录)后重置自身。

我假设人们通常只是在 Logout() 调用之后进行 Redirect() 操作,因此这从来都不是问题,但在 AJAX 情况下,这并不总是实用。

我当前的解决方案是在我自己的包装器中抽象身份,因此一旦我注销,我就可以更新它。我只是有点担心这可能会产生一些隐晦的副作用,特别是如果有人直接访问 IPrincipal 而不是通过包装器。

最佳答案

这是 ASP.NET 事件管道的核心限制,因为它与表单例份验证相关。这也使其容易受到重放攻击,如 KB article 900111 中所述。 。在那篇文章中,他们引用了一种使用成员(member)资格提供程序的解决方案,该提供程序存储有关登录用户的一些服务器端信息。

成员(member)资格提供程序似乎与您正在考虑采取的方法非常相似,我想知道您是否应该考虑使用内置成员(member)资格提供程序之一,或者编写自定义代码作为成员(member)资格提供程序。这应该可以解决人们不理解该方法并直接调用 IPrincipal 的一些担忧。

您的“注销但保持在同一页面上”使问题更加突出,但最终您只是发现了每个人在使用 ASP.NET 时都会遇到的相同的基本重播问题(但并非每个人都能解决它)。

This related question也可能有帮助。

关于asp.net-mvc - 为什么 WebSecurity.Logout *立即*将 IPrincipal.User 更新为空用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com