转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
asp.net身份验证和授权下篇         ★★★★

asp.net身份验证和授权下篇

作者:闵涛 文章来源:闵涛的学习笔记 点击数:721 更新时间:2009/6/9 2:34:42

4. ASP.NET身份验证实现

4.1 方案特性

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

4.2 安全配置步骤

4.2.1 IIS配置步骤

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

4.2.2 ASP.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>元素设置为:
<authentication mode="Forms" >
<forms name="MyAppFormAuth" loginUrl="login.aspx" protection="All" timeout="20" path="/">
</forms>
</authentication>

4.2.3 配置SQL Server

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

4.3 程序代码

4.3.1 身份验证事件序列

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

4.3.2 代码实现步骤

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

// 创建身份验证票证
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(1, // version
txtUserName.Text, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(60),// Expiration
false, // Persistent
roles ); // User data

string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
// 创建Cookie
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);

Response.Cookies.Add(authCookie);

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

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

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
// 提去窗体身份验证cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];

if(null == authCookie)
{
return;
}

FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch(Exception ex)
{
return;
}

if (null == authTicket)
{
return;
}

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

// 创建Identity object
FormsIdentity id = new FormsIdentity( authTicket );

GenericPrincipal principal = new GenericPrincipal(id, roles);
Context.User = principal;
}

    具体的代码各位网友可以自行补充完成

[办公软件]在Powerpoint中如何插入Flash动画  [办公软件]根除PowerPoint中Flash动画不能正常播放的问题
[办公软件]Office(Word,Excel)密码破解软件(Office Password…  [办公软件]powerpoin自定义播放FLASH动画
[办公软件]PPT插入Flash其属性无自定义的两种解决办法  [办公软件]如何在excel中插入flash动画
[Sql Server]ASP.NET利用SQLDMO实现数据库的备份与恢复下篇  [Sql Server]ASP.NET利用SQLDMO实现数据库的备份与恢复上篇
[Web开发]ASP.NET地址重写、使用伪静态、页面回发处理  [Web开发]asp.net(c#)发送邮件代码
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台