【问题标题】:What is this Authentication model called in the ASP.NET world在 ASP.NET 世界中,这种身份验证模型是什么?
【发布时间】:2013-10-12 23:57:23
【问题描述】:

我知道 ASP.NET 支持各种身份验证模型,例如 Windows、表单、护照和最近的声明。

我有一个asp.net,它会提示用户输入用户名/密码进行登录,然后它将输入的用户名/密码与应用程序数据库的用户表中的条目进行比较。所以,我的问题是,这种身份验证模型的术语/名称是什么?这在上面提到的 ASP.NET 支持的身份验证模型中属于哪里?

我还看到我知道的许多互联网站点都使用相同的方法。

(注意:我的应用程序很简单,当然它有用户注册/添加页面、授权用户的个人资料表等)

【问题讨论】:

  • 但是我没有在web.config中设置<authentication mode="Forms">
  • 您是否让用户为每个页面请求输入密码?如果不是,您正在以某种方式存储它们的身份验证值。你是怎么做到的?

标签: asp.net .net security


【解决方案1】:

Windows、Forms、Passport、Claims 等。身份验证是BROWSER 身份验证方案。它们是浏览器与服务器通信以提供凭据的机制。它们与数据库或任何其他存储机制(嗯,主要是......)无关。这些只是实现细节。

FormsAuthentication 使用 cookie 存储一个加密值,告诉服务器用户已通过身份验证。如果最终结果是颁发了 FormsAuthentication cookie,那么如何验证用户(无论是通过将事物与数据库进行比较、使用服务等)都无关紧要。

WindowsAuthentication 有点不同,浏览器和 Web 服务器通信以共享 Kerberos 票证以验证身份,或者用户在服务器请求浏览器弹出的框中输入用户名密码。在这种模式下,服务器本身管理身份验证发生的方式,而不涉及应用程序。

BasicAuthentication 使用 HTTP 标头以明文形式发送密码,从技术上讲,它是一个编码密码,但它众所周知,因此任何人都可以取消编码。同样,它存储数据的实际方法取决于服务器,而服务器在没有应用程序知识的情况下执行此操作。重要的部分是它是通过 HTTP Header 完成的。

其他类型的身份验证也是如此,它们都只是 cookie 和/或标头机制的变体。

这里的重点是,身份验证是关于任何给定的 HTTP 请求如何识别用户对服务器的身份,并最终确定应用程序。不是数据的存储方式或验证方式。因此,由于您没有告诉我们服务器和浏览器如何通信,我们无法告诉您身份验证是如何定义的,尽管几乎可以肯定它是 FormsAuthentication 的一种变体。

编辑:

只是一点历史课。之所以称为 FormsAuthentication,是因为身份验证系统不使用浏览器中的弹出对话框来输入凭据,而是通常网页提供一个 HTML 表单供用户输入凭据。除了根据请求传递 cookie 之外,浏览器根本不参与身份验证过程。

它应该更准确地称为“CookieBasedAuthentication”,但名称已卡住,可能会保持原样。 ASP.NET 提供了一个称为 FormsAuthentication 的特定实现,但是您可以对任何基于 cookie 的身份验证方案执行相同的操作(尽管我不建议您自己滚动,但您几乎肯定会犯安全错误)。

有些人认为在 Session 中存储一个标志就足够了。在任何情况下都不要使用 Session 来存储身份验证信息。会话 cookie 没有加密,很容易被窃取和/或欺骗。使用众所周知的方法。

【讨论】:

  • 很好的答案。这是绝对正确的。感谢您花时间详细介绍。
【解决方案2】:

其他答案可能已经显示了大部分细节。但是,如果我们仔细分类 IIS 和 ASP.NET 级别,以下是您应该注意的差异,


IIS 身份验证

这首先发生,因为 HTTP 数据包首先到达 IIS 级别。 IIS 支持多种方式,

  • 匿名(IIS 配置中配置的匿名用户帐户)
  • Windows(浏览器端用户)
  • 基本(浏览器端用户)
  • 摘要(浏览器端用户)

这些身份验证方法如何在数据包级别工作需要您捕获网络数据包并深入了解该级别的对话。

此身份验证的结果是 IIS 生成用户令牌并传递给 ASP.NET 管道。


ASP.NET 身份验证

ASP.NET 有自己的几种身份验证方法,

  • Windows(此处 ASP.NET 信任并解释 IIS 传递的用户令牌,并确定应该创建哪个 ASP.NET 用户身份以及它支持哪些角色,而无需在 ASP.NET 级别进行进一步的身份验证。)
  • 表单(基于)身份验证(其中 ASP.NET 忽略用户令牌,并使用 cookie 或类似机制构建高级身份验证方法。在 IIS 端,您通常设置匿名身份验证。)
  • 基于声明的身份验证、OpenID、OAthen 等类似于基于表单,它们不太关心 IIS 生成的用户令牌。

可以在 IIS 上使用非匿名,在 ASP.NET 端使用非 Windows 来设置所谓的混合身份验证。

【讨论】:

  • 感谢您的精彩解释
【解决方案3】:

所有需要用户输入您维护的用户名和密码的身份验证方法都是表单身份验证的一种形式。这是因为您要求他们填写表格(用户名和密码)以对他们进行身份验证。

阅读更多信息HereHere.

编辑:Mystere Man 提供的答案比我的更完整和准确。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多