身份验证和授权入门指南






4.81/5 (11投票s)
本文解释了 ASP.NET 中存在的不同类型的授权和身份验证,以及它们在 WebApplication 中的工作方式。
引言
.NET 开发中的主要方面是代码安全。帮助保护网站免受未经授权的访问是 Web 开发人员面临的一个复杂问题。ASP.NET 在 .NET 框架和 IIS(Internet Information Services)的帮助下提供了 Web 应用程序保护。在本文中,我们将简要回顾身份验证和授权概念。我认为这对初学者会有所帮助。
背景
我想感谢 Abhijit Jana 撰写的关于 IIS 6.0 入门的精彩文章。他的文章鼓励我写一些关于授权和身份验证的内容。本文将为您提供身份验证和授权及其在 WebApplication 中工作方式的基本概念。
什么是身份验证
基本上,身份验证和授权是两个相互关联的事情。首先进行身份验证,然后进行授权。身份验证意味着检查 Is valid User?
(用户是否有效?)深入来说,身份验证是获取用户的身份凭据(如姓名和密码)并根据某个权威机构验证这些凭据的过程。如果凭据有效,则意味着一旦身份已通过身份验证,授权过程便会开始。
.NET 使用以下身份验证提供程序进行身份验证:
- Windows 身份验证
- 表单身份验证
- .NET Passport 身份验证
在深入研究身份验证之前,让我们先看看授权。
什么是授权
授权是确定已通过身份验证的用户拥有什么权限的过程?
通过使用授权,我们可以通过授予或拒绝已通过身份验证的身份特定的权限来限制访问权限。授权的目的是确定是否应授予身份对给定资源的请求的访问类型。
有两种基本方法可以授权对给定资源的访问:
- URL 授权
- 文件授权
让我们从身份验证提供程序开始。
Windows 身份验证
这是 .NET 的默认身份验证提供程序。ASP.NET 在 IIS 的帮助下使用 Windows 身份验证。
IIS 以以下方式执行身份验证:
- 集成身份验证
- 基本身份验证
- 摘要式身份验证
- 匿名身份验证
IIS 身份验证完成后,ASP.NET 使用已通过身份验证的身份来授权访问。可以配置 IIS,以便只有 Windows 域用户才能登录。
集成身份验证
此身份验证也称为 Windows NT Challenge/Response 身份验证。集成 Windows 身份验证默认启用 Windows Server 2003 操作系统。此处应用程序使用挑战/响应协议或 Kerberos 来验证用户。
尽管集成 Windows 身份验证是安全的,但它确实存在两个限制:
- 只有 Microsoft Internet Explorer 2.0 及更高版本支持此身份验证方法。
- 它不能在 HTTP 代理连接上工作。
集成 Windows 身份验证最适合内网环境。
基本身份验证
此身份验证需要用户名和密码才能通过网络连接,但提供的密码以明文形式发送。因此,这是一种不安全的身份验证。
以下步骤显示了基本身份验证的工作方式:
- Web 浏览器显示一个对话框,供用户输入用户名和密码。
- 然后,它尝试使用用户的凭据与服务器建立连接。
- 如果用户凭据被拒绝,浏览器将显示身份验证对话框以再次进行验证。
- 如果用户凭据被接受,则它与服务器建立连接。
它有一些优点和缺点,如下所示:
- 优点:它是 HTTP 规范的一部分,并且受大多数浏览器支持。
- 缺点:浏览器在网络上以明文格式传输用户密码。
摘要式身份验证
在此类身份验证中,密码在通过网络发送之前被哈希处理。Digest 身份验证将凭据作为 MD5 HASH
或消息摘要在网络上传输。但是,要使用 Digest 身份验证,我们必须使用 Internet Explorer 5.0 或更高版本。用户名和运行 IIS 的 IIS 必须属于同一域。
匿名身份验证
这是一种非常开放和公开的身份验证。当用户尝试打开网站时,IIS 不会检查任何身份验证。
表单身份验证
用户提供凭据并提交表单。如果用户成功通过身份验证,系统将发出一个包含获取身份的凭据或密钥的 cookie。
如果您的应用程序需要在登录时通过 HTML 表单收集自己的用户凭据,那么 Forms 身份验证是一个不错的选择。在此身份验证中,我们可以为已知用户自定义内容。基本上,在这种情况下,系统会接受用户的凭据(主要是用户名和密码)。应用程序代码会检查凭据以确认其真实性。如果凭据已通过身份验证,则应用程序代码将附加一个包含用户名的 cookie,而不是密码。如果凭据失败,则请求将返回访问被拒绝的消息。
让下面的图片清晰地说明这个想法

.NET Passport 身份验证
Microsoft .NET Passport 是一个用户身份验证服务,是 Microsoft .NET 框架的组成部分。Passport 身份验证是一个集中式身份验证服务,.NET Passport 使用标准 Web 技术和技术,如安全套接字层 (SSL)、HTTP 重定向、cookie、Microsoft JScript 和强对称密钥。登录、登出和注册页面是集中托管的,而不是特定于单个站点。
参与的网站与中央 .NET Passport 服务器之间没有实时或服务器到服务器的通信。
要为 ASP.NET 应用程序启用身份验证提供程序,请在 Web.config 文件中创建一个条目,如下所示:
//Web.config file
<authentication mode="[Windows|Forms|Passport|None]" />
默认身份验证模式为 **Windows**。如果我们设置身份验证模式为 **None**,那么 ASP.NET 将不会对客户端请求应用任何身份验证检查。
**None** 身份验证在您希望引入自定义身份验证方案或不想进行任何身份验证以获得最高性能时可能很有用。
URL 授权
URL 授权将用户和角色映射到 URL 命名空间的各个部分。通过使用此身份验证,我们可以有选择地允许或拒绝对某些集合、用户或角色的访问。您只需在 <authorization>
部分的 <allow>
或 <deny>
元素中放置用户和角色列表。
有两个特殊的身份我们可以允许或拒绝:
* | 指所有身份 |
? | 指匿名身份 |
考虑下面的例子,它将强调这个主题
<authorization>
<allow users="ABC"/>
<allow roles="XXX"/>
<deny users="XYZ"/>
<deny users="?"/>
</authorization>
上面的例子授予了 ABC 用户和 XXX 角色的用户访问权限。而它拒绝了 XYZ 用户和匿名用户的访问。
我们可以在一个元素中为多个用户指定权限
<authorization>
<allow users="ABC, XYZ"/>
</authorization>
如果您想拒绝所有用户的访问,则设置如下:
<authorization>
<deny users="*"/>
</authorization>
文件授权
当您使用 Windows 身份验证时,文件授权处于活动状态。它将检查文件的访问权限。为此,它会执行 .aspx 或 .asmx 处理程序文件的访问控制列表 (ACL) 检查,以查看用户是否具有该文件的访问权限。应用程序可以进一步使用模拟技术来检查它们正在访问的资源。文件访问是根据 NTFS 文件权限进行的。检查确保用户具有请求文件的 READ 访问权限。默认用户帐户是 ASPNET 帐户。
模拟是登录用户扮演已通过身份验证的实体的技术。默认情况下,不启用模拟。我们可以在 web.config
文件中设置模拟:
<identity impersonate="true"/>
或者我们可以为模拟提供用户名和密码。用户名指示用户正在代表谁在一个站点上工作。
<identity impersonate="true" userName="administrator" password="pass"/>
我们也可以从 IIS 中启用这些设置。
最后,关于身份验证和授权的基本概念就这些。
摘要
让我们快速回顾一下我们学到的内容。为了提高 Web 应用程序的安全性,ASP.NET 和 IIS 引入了 身份验证
和 授权
过程。
- 身份验证是检查用户是否有效的过程
- 授权是检查已通过身份验证的用户拥有什么访问权限的过程
- 您可以使用 [Windows/Forms/Anonymous/.NET passport/None] 身份验证
- 您可以使用 [File/URL] 授权
如果您的应用程序在内网运行,那么您应该使用 **Windows** 身份验证。这将跟踪内网中的所有用户。否则,Forms 身份验证可能是一个不错的选择。
参考文献
知识是无止境的。我们必须学习更多,获取更多。我用以下参考文献写了这篇文章:
- IIS 6.0 帮助主题
- MSDN
历史
- 2010 年 1 月 30 日:初始帖子