首页 > 编程 > .NET > 正文

asp.net 中用户和角色的验证

2024-07-10 12:57:09
字体:
来源:转载
供稿:网友

最大的网站源码资源下载站,

本文引用下面的 microsoft .net framework 类库命名空间: • system.web.security
• system.web.principal

请求的安全性事件流
以下步骤简要介绍了在客户端发出请求时发生的事件序列: 1. 客户端请求 iis 服务器上的一个 .aspx 页。
2. 将客户端凭据传递给 iis。
3. iis 对客户端进行身份验证,然后将经过身份验证的标记随客户端请求一起传送到 asp.net 工作进程。
4. 根据 iis 传送的经过身份验证的标记以及 web 应用程序的配置设置,asp.net 决定是否在处理请求的线程上模拟用户。microsoft active server pages (asp) 和 asp.net 的明显区别是,asp.net 在默认情况下不再模拟经过身份验证的用户。若要启用模拟,必须在 web.config 文件中将 identity 部分中的 impersonate 属性设置为 true。

相关配置设置
iis 在 iis 配置数据库中保存与安全性有关的配置设置。但是,asp.net 在可扩展标记语言 (xml) 配置文件中保存安全(及其他)配置设置。虽然从安全性的角度来看,这通常可简化应用程序的部署,但应用程序采用的安全模型要求通过其配置文件 (web.config) 来正确配置 iis 配置数据库和 asp.net 应用程序。

以下配置部分与 asp.net 安全性有关: &#8226; <authentication> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfauthenticationsection.asp
&#8226; <authorization> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfauthorizationsection.asp
&#8226; <identity> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfidentitysection.asp
&#8226; <machinekey> 部分
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfmachinekeysection.asp

身份验证
身份验证是指以下过程:获取标识凭据(如用户名和密码),并对照某一颁发机构来验证这些凭据。

asp.net 提供了四个身份验证提供程序: &#8226; 表单身份验证
&#8226; windows 身份验证
&#8226; passport 身份验证
&#8226; 默认身份验证

表单身份验证
表单身份验证是指以下系统:将未经身份验证的请求重定向到一个超文本标记语言 (html) 表单,使用户能够在其中键入他们的凭据。在用户提供凭据并提交该表单后,应用程序对请求进行身份验证,然后系统以 cookie 的形式发出身份验证票证。此 cookie 包含凭据或用于重新获取标识的密钥。浏览器的后续请求自动包含此 cookie。


windows 身份验证
在 windows 身份验证中,iis 执行身份验证,并将经过身份验证的标记传递给 asp.net 工作进程。使用 windows 身份验证的优点是它需要的编码最少。在将请求传递给 asp.net 之前,您可能需要使用 windows 身份验证来模拟 iis 进行验证的 windows 用户帐户。


passport 身份验证
passport 身份验证是 microsoft 提供的集中式身份验证服务,它为成员站点提供单一登录和核心配置文件服务。通常,当您需要跨越多个域的单一登录功能时,将使用 passport 身份验证。


默认身份验证
当 web 应用程序不需要任何安全功能时,将使用默认身份验证;此安全提供程序需要匿名访问。在所有的身份验证提供程序中,默认身份验证为应用程序提供了最高的性能。当您使用自己的自定义安全模块时,也可以使用此身份验证提供程序。


授权
授权是指验证经身份验证的用户是否可以访问请求资源的过程。

asp.net 提供以下授权提供程序: &#8226; fileauthorization
&#8226; urlauthorization

fileauthorization
fileauthorizationmodule 类进行文件授权,而且在使用 windows 身份验证时处于活动状态。fileauthorizationmodule 负责对 windows 访问控制列表 (acl) 进行检查,以确定用户是否应该拥有访问权限。
urlauthorization
urlauthorizationmodule 类进行统一资源定位器 (url) 授权,它基于 uri 命名空间来控制授权。uri 命名空间可能与 ntfs 权限使用的物理文件夹和文件路径存在很大的差异。

urlauthorizationmodule 实现肯定和否定的授权断言;即,可以使用该模块有选择性地允许或拒绝访问用户、角色(如 manager、tester 和 administrator)和谓词(如 get 和 post)的 uri 命名空间的任意部分。


基于角色的安全性
asp.net 中基于角色的安全性类似于 microsoft com+ 和 microsoft transaction server (mts) 所使用的基于角色的安全性,不过它们之间也存在很大的差异。asp.net 中基于角色的安全性不仅限于 windows 帐户和组。例如,如果启用 windows 身份验证和模拟,用户的标识就是 windows 标识 (user.identity.name = "domain/username")。可以检查特定角色中成员的标识,并相应地限制其访问权限。例如:



visual c# .net 代码
if ( user.isinrole("builtin//administrators"))
response.write("you are an admin");
else if (user.isinrole("builtin//users"))
response.write("you are a user");
else
response.write("invalid user");

如果使用的是表单身份验证,则不会为经过身份验证的用户分配角色;您必须以编程方式执行此任务。若要为经过身份验证的用户分配角色,请使用身份验证模块(本例中为表单身份验证模块)的 onauthenticate 事件创建新的 genericprincipal 对象,并为其分配 httpcontext 的 user 属性。以下代码对此进行了说明:



visual c# .net 代码
public void application_authenticaterequest(object s, eventargs e)
{
if (httpcontext.current.user != null)
{
if (httpcontext.current.user.identity.authenticationtype == "forms" )
{
system.web.security.formsidentity id = httpcontext.current.user.identity;
string[] myroles = new string[3];
myroles[0]= "managers";
myroles[1]= "testers";
myroles[2]= "developers";
httpcontext.current.user = new system.security.principal.genericprincipal(id,myroles);
}
}
}

若要检查用户是否属于特定的角色并相应地限制其访问权限,请在 .aspx 页中使用以下代码(或类似的代码):



visual c# .net 代码
if (user.isinrole("managers"))
response.write("you are a manager");
else if (user.isinrole("testers"))
response.write("you are a tester");
else if (user.isinrole("developers"))
response.write("you are a developer");


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表