第13章成员资格和角色管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第12章成员资格和角色管理
成员资格和角色管理功能的核心是利用自动生成数据库表,多个实现管理功能的API、成员资格和角色管理提供程序,实现模块化和自动化的成员资格和角色管理模式。具体而言,包括创建和管理用户和角色管理信息、实现对多种数据源中用户和角色信息的管理、验证访问应用程序的用户凭证、支持使用Cookie缓存角色信息实现角色管理和成员资格管理等功能的集成。
12.1身份验证和授权
Web站点创建的页面用于供用户浏览访问。这些页面可以分为两种类型:一中是允许所有用户访问,即无论用户身处网络的什么位置,无需用户凭证(如用户和密码)都可以访问页面;另一种是只允许部分用户访问,即所谓的身份验证。身份验证就是验证标识的过程,即验证某人(或某物)与其声称的人(或物)是否一致。该人或物称为“当事者”。身份验证要求证据,称为“凭证”,例如,客户端应用程序可以将密码用作凭证。所谓授权就是指一旦用户凭证通过验证,就必须确定此用户是否可以访问特定的资源,这个过程称之为授权。本节主要介绍身份验证概述、Forms验证概述、FormsAuthentication类和用户授权概述。12.1.1身份验证概述
身份验证是从用户处获取标识凭证(如用户名和密码),并通过某些授权机构验证那些凭证的过程。如果这些凭证有效,则将提交这些凭证的实体视为通过身份验证。在身份得到验证后,授权进程将确定该身份是否可以访问指定资源。 2.0身份验证有3种方式,它们分别是Windows验证、Passport验证和Forms验证。下面将对以上3种验证方法进行详细讲解。
1.Windows验证
在应用程序中,Windows身份验证将Microsoft Internet信息服务(IIS)所提供的用户标识视为已经通过身份验证的用户。IIS提供了大量用于验证用户标识的身份验证机制,其中包括匿名身份验证、Windows集成的(NTLM)身份验证、Windows集成的(Kerberos)身份验证、基本(base64编码)身份验证、摘要式身份验证以及基于客户端证书的身份验证。
在中使用WindowsAuthenticationModule模块来实现Windows身份的验证。该模块根据IIS所提供的凭据构造一个WindowsIdentity,并将该标识设置为该应用程序的当前User属性值。
Windows身份验证是应用程序的默认身份验证机制,并指定作为使用authentication配置元素的应用程序的身份验证模式。
2.Passport验证
Passport身份验证是由Microsoft提供的集中身份验证服务,该服务为成员站点提供单一登录和核心配置文件服务。Passport之所以让用户受益匪浅,原因在于用户不必登录访问受限制的新资源或站点。如果希望站点与Passport身份验证及授权兼容,则应该使用该提供程序。
Passport是基于Cookie的身份验证服务。使用Passport身份验证的示例事务对话的工作方式如下。
(1)客户端向受到保护的资源(如/default.aspx)发出HTTP GET 请求。
(2)检查客户的Cookie是否具有现有的Passport身份验证票。如果找到有效的凭据,则站点对该客户进行身份验证。如果请求不包括有效的身份验证票,则服务器返回状态代码
302并将用户重定向到Passport登录服务。响应在查询字符串中包含一个URL,该URL被发送到Passport登录服务以便将客户定向回原始站点。
(3)客户端执行重定向操作,再向Passport登录服务器发出HTTP GET请求,然后传输来自原始站点的查询字符串信息。
(4)Passport登录服务器向客户提供登录窗体。
(5)客户端填写窗体,并使用安全套接字层(SSL)将POST发送回登录服务器。
(6)登录服务器对用户进行身份验证并将客户重定向回原始的URL。响应在查询字符串中包含一个加密的PassportCookie。
(7)客户遵循重定向并再次请求原始的受保护资源,这一次使用Passport Cookie。
(8)起始服务器上的PassportAuthenticationModule会检测是否存在Passport Cookie,并测试身份验证。如果成功,则该请求通过身份验证。
Passport使用“三重DES”加密方案。当成员站点注册到Passport服务时,将被授予站点特定的密钥。Passport登录服务器使用该密钥对站点间传递的查询字符串进行加密和解密。
注意:若要使用Passport身份验证,在使用前,必须将站点注册到Passport服务,然后接受许可协议并安装.NET Passport SDK。
3.Forms验证
Forms验证是多数Web应用程序使用的身份验证方式。通过Passport身份验证,可以使用所创建的登录窗体验证用户的用户名和密码。未经过身份验证的请求被重定向到登录页,用户在该页上提供凭据和提交窗体。如果应用程序对请求进行了验证,系统会颁发一个票证,该票证包含用于重建后继请求的标识的密钥。
12.1.2 Forms验证概述
1.x技术支持Forms验证方式,关键基于Cookie来实现用户身份验证。然而,某些浏览器并不支持Cookie ,或者用户关闭了浏览器中对Cookie的支持功能,那么 1.x将无法使用Forms方式实现身份验证。为此, 2.0还保留了对基于Cookie实现身份验证的支持。
Forms身份验证提供了一种方法,可以使用自己的代码对用户进行身份验证,然后将身份验证标记保留在Cookie或页的URL中。Forms身份验证通过FormsAuthenticationModule 参与页的生命周期。可以通过FormsAuthentication类访问Forms身份验证信息和功能。
若要使用Forms身份验证,可以创建一个登录页。该登录页既收集了用户的凭据,又包含验证这些凭据时所需的代码。如果这些凭据有效,可以调用FormsAuthentication类方法,以便使用适当的身份验证票证(Cookie)将请求重定向到最初请求的资源。如果不需要进行重定向,只需获取Forms身份验证Cookie或对其进行设置即可。
使用authentication配置元素对Forms身份验证进行配置。最简单的情况是,在Web.config 文件或单独的文件中,可以通过指定的URL将未经身份验证的请求重定向到某个登录页,然后提供该登录页的最小实现,并提供有效的凭据。代码14-2演示配置文件的一部分。该配置文件为Authentication方法指定了登录页和身份验证凭据。密码已经使用HashPasswordForStoringInConfigFile方法进行加密。
成功通过身份验证之后,FormsAuthentication模块将会使用经过身份验证的用户信息填充当前的User属性。代码14-3演示的是如何以编程方式读取经过Forms身份验证的用户的标识。
Forms有关的配置信息都被保存在Web.config文件中,所有与Forms验证有关的设置都放置在