频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

ASP.NET应用程序的安全方案 身份验证(2)

作者: 佚名 出处:51CTO.com论坛整理 2007-12-10 11:53    砖    好    评论   进入论坛
阅读提示:任何成功的应用程序安全策略的基础都是稳固的身份验证和授权手段,以及提供机密数据的保密性和完整性的安全通讯。
4.ASP.NET身份验证实现

4.1方案特性

在这部分,仅提供了一种Intranet下交互式WEB应用程序的身份验证的实现,本方案假设具有以下特性:

只有通过了身份验证的客户端才能访问应用程序。
数据库相信应用程序对用户进行了相应的身份验证-即应用程序代表用户对数据库进行调用。
WEB应用程序通过使用ASP.NET进程帐户连接到数据库。
用户的凭据信息是根据SQLServer数据库进行验证的。
使用窗体身份验证模式。
在WEB应用程序中,用户的凭据信息是根据SQLServer数据库,采用窗体身份验证模式,便于实现用户个性化设计。采用应用程序代表用户对数据库进行调用的方式,可采用受信任子系统模型,更好地利用数据库连接池,并且可以保证用户不能直接访问后端数据库,另外可以减少后端的ACL管理工作。

4.2安全配置步骤

4.2.1IIS配置步骤

对Web服务的虚拟根目录启用匿名访问。
主要方法是使用IISMMC管理单元,右击应用程序的虚拟目录,然后单击属性---〉目录安全性--〉匿名访问和安全控制--〉编辑。

4.2.2ASP.NET配置步骤

1.将ASPNET帐户(用于运行ASP.NET)的密码重新设置为一个更安全的密码。
这样允许在数据库服务器上复制一个本地帐户(具有相同的用户名和密码)。为了使用Windows身份验证连接到数据库时,能够使ASPNET帐户对来自数据库的网络身份验证要求进行响应,这是必须的。
具体方法是编辑位于%windr%\Microsoft.NET\Framework\v1.1.4322\CONFIG目录下的Machine.config文件,将<processModel>元素上的密码属性重新配置,将其默认值<!-UserName="machine"password="AutoGenerate"-->改为<!-UserName="machine"password="NewPassword"-->。

2.配置ASP.NET,使用窗体身份验证。
编辑位于WEB服务的虚拟根目录下的Web.config文件,将<authentication>元素设置为:
<authenticationmode="Forms">
<formsname="MyAppFormAuth"loginUrl="login.aspx"protection="All"timeout="20"path="/">
</forms>
</authentication>

4.2.3配置SQLServer

1.在SQLServer数据库上创建一个和ASP.NET进程帐户匹配的Windows帐户。
用户名和密码必须和ASP.NET应用程序帐号匹配。
2.配置SQLServer,使其使用Windows身份验证。
3.为自定义的ASP.NET应用程序帐户创建一个SQLServer登录,授予对SQLServer的访问权。
4.创建一个新的数据库用户,并将登录名映射为数据库用户。
5.创建一个用户定义的新数据库角色,并将数据库用户添加到该角色。
6.为数据库角色确定数据库权限。

4.3程序代码

4.3.1身份验证事件序列
当未通过身份验证的用户试图放一个受保护的文件或资源被拒绝时,触发的事件序列如图3所示。

4.3.2代码实现步骤

1.建一个WEB登录窗体并验证用户提供的凭据信息
根据SQLServer数据库来验证凭据信息。
2.从数据库里获取角色列表
3.创建窗体身份验证票证
在票证中保存所获取的角色信息。示例代码如下:
privatevoidbtnLogin_Click(objectsender,System.EventArgse)
{
//根据SQLServer数据库进行验证(具体实现略)。
boolisAuthenticated=IsAuthenticated(txtUserName.Text,txtPassword.Text);
if(isAuthenticated==true)
{
//获取用户的角色
stringroles=GetRoles(txtUserName.Text,txtPassword.Text);

//创建身份验证票证
FormsAuthenticationTicketauthTicket=new
FormsAuthenticationTicket(1,//version
txtUserName.Text,//username
DateTime.Now,//creation
DateTime.Now.AddMinutes(60),//Expiration
false,//Persistent
roles);//Userdata

stringencryptedTicket=FormsAuthentication.Encrypt(authTicket);
//创建Cookie
HttpCookieauthCookie=
newHttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);

Response.Cookies.Add(authCookie);

//将用户重定向到最初请求页面。
Response.Redirect(FormsAuthentication.GetRedirectUrl(
txtUserName.Text,
false));
}
}

4.创建IPrincipal对象可在Application_AuthenticateRequest事件中创建一个IPrincipal对象,一般使用GenericPrincipal类。
5.将IPrincipal对象置于当前的HTTP上下文

protectedvoidApplication_AuthenticateRequest(Objectsender,EventArgse)
{
//提去窗体身份验证cookie
stringcookieName=FormsAuthentication.FormsCookieName;
HttpCookieauthCookie=Context.Request.Cookies[cookieName];

if(null==authCookie)
{
return;
}

FormsAuthenticationTicketauthTicket=null;
try
{
authTicket=FormsAuthentication.Decrypt(authCookie.Value);
}
catch(Exceptionex)
{
return;
}

if(null==authTicket)
{
return;
}

//提取角色
string[]roles=authTicket.UserData.Split(newchar[]{'|'});

//创建Identityobject
FormsIdentityid=newFormsIdentity(authTicket);

GenericPrincipalprincipal=newGenericPrincipal(id,roles);
Context.User=principal;
}

具体的代码读者可以自行补充完成。



【责任编辑:于捷 TEL:(010)68476606】


共2页: 上一页 [1] 2
【内容导航】
 第 1 页:身份验证概念及模式  第 2 页:ASP.NET身份验证实现
专题
见证中国网络安全二十年
NAC安全访问控制
微软Forefront企业安全解决方案
VPN安全技术与应用
安全防范与策略
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。