加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC中的完全自定义身份验证:丢失HttpContext.User

发布时间:2020-12-16 03:48:38 所属栏目:asp.Net 来源:网络整理
导读:我有我自己的身份验证系统( https://bitbucket.org/anton_gogolev/octalforty-structural),它不使用任何标准的ASP.NET东西( authentication mode =“None”/). 它使用普通的IHttpModules来完成它的工作:BeginRequest检查传入的cookie并在成功认证时设置Http
我有我自己的身份验证系统( https://bitbucket.org/anton_gogolev/octalforty-structural),它不使用任何标准的ASP.NET东西(< authentication mode =“None”/>).

它使用普通的IHttpModules来完成它的工作:BeginRequest检查传入的cookie并在成功认证时设置HttpContext.Current.User和Thread.CurrentPrincipal

Thread.CurrentPrincipal = HttpContext.Current.User = 
    new GenericPrincipal(tokenIdentity,new string[] { });

而EndRequest会为经过身份验证的用户发出所有必需的Cookie.

这几个月以来一直运行良好,但在某些系统上(我真的不知道它们与实际工作方式有何不同)ASP.NET似乎正在失去HttpContext.Current.User的价值,取而代之的是默认值有(GenericPrincipal聚合GenericIdentity,IsAuthenticated设置为false等).

所以问题是:HttpContext.Current.User如何以及为什么会丢失?

解决方法

听起来有另一个模块在BeginRequest之后修改HttpContext.Current.User.我建议在PostAuthenticateRequest中设置它.

我在使用ASP.NET启用RoleManager模块之前遇到过这个问题.将以下内容添加到web.config的system.web部分修复它.

<httpModules>
     <remove name="RoleManager"/>
</httpModules>

这里有一些关于我做了什么来解决这个问题的放大信息:

1)弄清楚正在运行的其他模块.这是一个article,提供了一些代码来执行此操作.

2)确保将HttpContext.Current.User设置在正确的位置. BeginRequest不是一个好的地方.PostAuthenticateRequest通常是最好的(并推荐).如果另一个模块也在使用PostAuthenticateRequest并且碰巧在你的之后运行,这不会阻止这个问题,但在很多情况下它会解决问题(使用上面的web.config片段).

3)有选择地禁用每个已安装的模块并测试您的应用程序,直到您的自定义Principal对象未被覆盖.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读