代码之家  ›  专栏  ›  技术社区  ›  Rob Walker

ASP.NET FormsAuthentication服务器端无效

  •  9
  • Rob Walker  · 技术社区  · 15 年前

    我正在尝试FormsAuthentication(使用ASP.NET MVC2),它工作得相当好。

    但是,有一个我无法解决的问题是验证服务器上的用户标识,以确保它在 服务器的 观点。

    如。

    1. 用户登录…得到一个饼干/票
    2. 带外用户在服务器端被删除
    3. 用户向服务器发出新请求。httpcontext.user.identity.name设置为已删除的用户。

    我可以 发现 很好,但正确的处理方法是什么?打电话 FormsAuthentication.SignOut OnAuthorization OnActionExecuting 事件太晚,无法影响当前请求。

    或者,我希望能够在删除用户(或重新创建数据库)时调用FormsAuthentication.InvalidateUser(…)以使给定(或所有)用户的所有票证无效。但是我找不到一个API来做这个。

    1 回复  |  直到 13 年前
        1
  •  7
  •   Scott Rippey    13 年前

    在global.asax中,添加 AuthenticateRequest . 在这种方法中,表单身份验证已经发生,您可以在发生任何其他事情之前自由修改当前主体。

    protected void Application_AuthenticateRequest(object sender, EventArgs e) {
      IPrincipal principal = HttpContext.Current.User;
      if (!UserStillValid(principal)) {
        IPrincipal anonymousPrincipal = new GenericPrincipal(new GenericIdentity(String.Empty), null);
        Thread.CurrentPrincipal = anonymousPrincipal;
        HttpContext.Current.User = anonymousPrincipal;
      }     
    }
    

    只需执行 UserStillValid 方法,你就完成了。如果需要的话,它也是一个交换通用主体和自定义主体的好地方。