表单身份验证到底存在于 Http 管道中的什么位置?

发布于 2024-09-28 04:19:04 字数 33 浏览 2 评论 0原文

表单身份验证到底存在于 Http 管道中的什么位置?

Where exactly does Forms Authentication exist in the Http Pipeline?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

前事休说 2024-10-05 04:19:04

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

对于每个请求,该模块都会查找身份验证 cookie。如果不存在,请求将重定向到登录页面。成功登录后,身份验证 cookie 将发送回浏览器。然后,在后续请求中,浏览器将发送 cookie,该 cookie 将由模块进行验证,然后照常处理请求。

This is handled by an HTTP module, System.Web.Security.FormsAuthenticationModule. If you look at the system-wide web.config file, c:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config, you can see where it's mentioned in the <httpModules> section. The site-specific web.config file will inherit the configuration in that file.

On each request, the module will look for an authentication cookie. If it's not present, the request is redirected to the login page. On a successful login, an authentication cookie is sent back to the browser. Then on subsequent requests, the browser will send the cookie, which will be validated by the module, and then the request is handled as usual.

梦年海沫深 2024-10-05 04:19:04

我想我应该先想到这一点,但直到我看到@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,该方法传入应用程序上下文,这就是它验证/写出表单身份验证票证的地方。

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

Guess I should've thought of this first but it didn't dawn on me until I saw the answer from @Carl Raymond that I can just crack it open in reflector. So to answer my own question

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 calls the private method OnAuthenticate which passes in the application context and this is where it validates/writes out the Form Auth tickets.

In OnExit it checks the response for a Http Status Error Code 401 and if it finds it, that's when it redirects to the Login Url.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文