【问题标题】:Checking user authentication in Page_Load()... anywhere else?检查 Page_Load()... 中的用户身份验证... 其他任何地方?
【发布时间】:2013-08-18 02:08:23
【问题描述】:

对于我的 ASP.Net WebForms 应用程序中的每个页面,我都会像这样检查用户的访问权限:

protected void Page_Load(object sender, EventArgs e) {
    if (!UserCanAccessPage())
        RedirectToAccessNotPermitted();

    // < if user has access, set up the page >
}

我的问题是,单次检查是否足够,或者我应该检查所有其他处理程序:

protected void seriousDeleteButton_Click(object sender, EventArgs e) {

    // ** DO I NEED TO CHECK ACCESS AGAIN HERE? **

    // < do stuff that only some users have access to >
}

我知道在正常的页面生命周期下,应该始终在事件处理程序之前调用 Page_Load(),但我想知道是否有一种棘手的方法可以使用 curl 访问其他 ASP.NET 端点或使用 javascript 或东西。

(我只是在谈论常规的 WebForms 样式的回发,没有明确的 AJAX 内容。但当然 UpdatePanel 使用异步 javascript,我确信其他控件也可以这样做。)

【问题讨论】:

  • 听起来您重新发明了内置的身份验证和授权机制。为什么不直接切换到现有的基于表单身份验证的方法?
  • 我们确实使用内置身份验证(“Windows”身份验证)来确保所有用户都经过身份验证。我说的是对特定页面和功能的更精细的访问控制,例如“项目经理只能对他们负责的项目进行更改”之类的。这类事情需要在代码中完成。

标签: asp.net authentication webforms


【解决方案1】:

是的,这就足够了,因为每次用户请求新页面或回发页面时都会调用 Page_Load。您无需再次检查按钮单击事件。

但是,对于有几个页面的网站来说,这很好。换句话说,如果你有多个页面,维护将是一场噩梦。

通常,您希望使用Form Authentication,并通过使用 web.config 限制对页面的访问。

【讨论】:

  • 好的,很高兴知道事件处理程序没有捷径。 (我们确实使用内置身份验证;请参阅我对@WiktorZychla 对该问题的评论的回复。
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多