代码之家  ›  专栏  ›  技术社区  ›  Chris Marisic

HTTP管道中的表单身份验证具体在哪里?

  •  2
  • Chris Marisic  · 技术社区  · 15 年前

    HTTP管道中的表单身份验证具体在哪里?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Carl Raymond    15 年前

    这由HTTP模块System.Web.Security.FormsAuthenticationModule处理。如果查看系统范围的web.config文件, c:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config ,您可以看到在 <httpModules> 部分。特定于站点的web.config文件将继承该文件中的配置。

    对于每个请求,模块都将查找身份验证cookie。如果不存在,请求将被重定向到登录页面。成功登录后,将向浏览器发送一个身份验证cookie。然后,在随后的请求中,浏览器将发送cookie,该cookie将由模块验证,然后像往常一样处理请求。

        2
  •  0
  •   Chris Marisic    15 年前

    我想我应该先想到这一点,但直到我看到@carl raymond的答案,我才明白我可以在反射镜中打开它。所以回答我自己的问题

    public void Init(HttpApplication app)
    {
        if (!_fAuthChecked)
        {
            _fAuthRequired = AuthenticationConfig.Mode == AuthenticationMode.Forms;
            _fAuthChecked = true;
        }
        if (_fAuthRequired)
        {
            FormsAuthentication.Initialize();
            app.AuthenticateRequest += new EventHandler(this.OnEnter);
            app.EndRequest += new EventHandler(this.OnLeave);
        }
    }
    

    OnEnter 调用私有方法 OnAuthenticate 它在应用程序上下文中传递,并在这里验证/写出表单auth票据。

    在 OnExit 它检查HTTP状态错误代码401的响应,如果找到了,就重定向到登录URL。

    推荐文章