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;
}
具体的代码读者可以自行补充完成。
| 共2页: 上一页 [1] 2 | ||||
|
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||