Application.BeginRequest
HttpContext可用 
      |
Application.AuthenticateRequest
填充Identity&Prinicpal对象  //准备验证对象(可以在这里定义自己的role组)
      |
Application.AuthorizeRequest
处理自定义的授权需求
      |
Application.AcquireRequestState
Session开始可用,[获得]响应状态及转入Page对象处理
这样可以防止Session存储验证信息
导致不安全因素

<authentication>配置验证模式
元素只能在应用程序(虚拟目录)根文件夹下的web.config文件中使用,so每个应用程序只能定义一个身份验证类型.如果必须使用一个不同的身份认证类型则必须将它定义为一个独立的应用程序

<forms>
元素里的name属性用于区别同一个web服务器上不同应用程序的cookie name

<authorization>配置验证授权
是一个批准和拒绝访问特定资源的过程
可以定义于子文件夹中!!!

不必为了使用身份验证而限制对页面的访问,纯粹为了个人化而使用身份验证是完全可能的
所以匿名用户可以看到通过验证的用户的所有可以看到的相同页面,只不过看到的结果不同而已

将错误信息写成
<asp:label id="ErrMessage" visalbe="false">密码或者用户名不正确,请重试</asp:label>
达到表示与业务逻辑的分离

建立身份验证票据的三种方式
1.一行代码完成验证匹配凭据(定义在<credentials>的<user>中),
FormsAuthentication.Authenticate(tbUserName.Text,tbPassword.Text);
FormsAuthentication.RedirectFromLoginPage(tbUserName.Text,false);
第二行创建一个FormsAuthenticationTicket并加密票据,最后写入cookie并重定向到最初的请求页面
false表示不创建持久性的cookie(关闭浏览器后会继续保留)

2.用Request.IsAuthenticated判断是否已经验证
用FormsAuthentication.Authenticate(tbUserName.Text,tbPassword.Text);的结果来验证
FormsAuthentication.SetAuthCookie(tbUserName.Text,false);来获得一个验证票据,并自动写入cookie中
已达到自定义重定向页面的功能
可以使用Response.Redirect(Request.Url.LocalPath);请求本身页面

3.
实现自己的验证
//    FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(admin_id,false,20);  //生成验证票据
authTicket.UserData可以存储额外的用户信息并一起被加密
//    string authStr = FormsAuthentication.Encrypt(authTicket);  //加密票据
//    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,authStr);  //生成加密后的cookie
//    Page.Response.Cookies.Add(authCookie);  //写入验证票据到cookie中
登出都使用简单的FormsAuthentication.SignOut();即可
然后可以使用Response.Redirect(Request.Url.LocalPath);重新加载本身页面确保已经变成匿名用户
可以在((FormsIdentity)User.Identity).Ticket.UserData来访问UserData
UserData不能存过多信息
ie与netscape支持4096个字节
如果超出则无法写入cookie并且不能通过身份验证
可以用生成多个Ticket来生成多个cookie存储信息
FormsAuthentication.AuthCookieName

要是持久性cookie期满(即生成时使用参数true)只能用FormsAuthentication.GetAuthCookie来是指期满时期并手动写入到http响应中

最好的解决方案时基于角色的授权!!!
用Context.User.IsInRole判断

假冒
使用<identity impersonate="true" userName="NixStudio/Administrator" password="procedure" />
来启用假冒来假冒一个windows帐户

Asp.Net安全模型
无论使用何种身份验证,程序利用登陆用户提供的凭据授予用户Principal(当前角色)和Identity(当前用户)
Principal对象利用Identity创建
HttpContext.Current.User返回的即是一个实现了Iprincipal的实例
实现角色授权
默认是使用GenericPricipal来填充Context.User
so
1.向身份验证cookie添加角色
2.利用含有角色的GenericPricipal填充Context.User,并添加用以自定义身份验证过程的事件处理程序

string[] roles = GetUserRoles(userName);  //取得用户所属的角色数组
//一个用户可以属于不同的角色
FormsAuthenticationTicket myTicket = new FormsAuthenticationTicket(
1,
tbUserName.Text,
DataTime.Now,
DateTime.Now.AddHour(3),
roleStringArr);

Application_OnAuthentiateRequest事件中可以来将用户的角色添加到HttpContext中
比如
或者也可以在自己验证过用户登陆后
System.Web.Security.GenericPincipal gp = new GenericPrincipal(Context.User.Identity,roles);
Context.User = gp;

然后用User.IsInRole("roleName")判断是否属于某个角色
然后决定相应的显示和功能

防止cookie被盗
可以通过监控用户的IP地址
即将ip信息写入Ticket中,然后验证是否来自同一个ip
FormsAuthenticationTicket ft = new FormsAuthentication(
FormsAuthentication.FormsCookieName,
DateTime.Now,
DateTime.Now.AddHours(2),
false,
Request.UserHostAddress.ToString());

判断Request.UserHostAddress.ToString() ?= (FormsIdentity(User.Identity)).Ticket.UserData即可
如果!=
则使用新的匿名标志填充
GenericIdentity i = new GenericIdentity("","");
string roles[] = {};
Context.User = new GenericPrincipal(i,roles);
也可以触发异常或者记录日志或者更多操作

问题:可能共享代理上网(ip一样)可能动态ip结果导致程序不必要的麻烦,即存储持久cookie会很困难

保存登陆用户列表
可以用Application["CurrentUsers"] = new HashTable();
来存储
用Session.SessionID来作为全局标志

提供多个登陆页面
1.使用单独的登陆页面,但自定义为多个页面
2.使用配置过的登陆页面
使用Response.Redirect在服务端进行重定向不必经过验证程序
因为已经过了那个环节了
或者使用location path="fileName.aspx"来配置对这些页面的允许访问

转载于:https://www.cnblogs.com/jetzhuo/archive/2006/04/05/367896.html

asp.net身份验证相关推荐

  1. Asp.net 身份验证、授权概述

    [本周]如约而至;时间是争取来的,这回的[本周]是把若干零碎的时间利用起来成文的,完成对Asp.net身份验证.访问授权等内容的梳理,可能漏掉的东西会比较多,漏掉的还是希望大家来补充.顺便说一下上次[ ...

  2. ASP.NET身份验证机制membership入门——配置篇(1){转}

    几乎所有的系统中都会使用到访问控制和角色管理这样的功能,例如:新建.修改.删除用户和角色,为用户分配角色,管理角色中的用户等等.于是MS在ASP.NET 2.0开始,实现了这些功能,使得我们在开发中, ...

  3. asp.net身份验证方式

    ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). 重点内容 Windows身份验证 常结合应用程序自定义身份验证使用使用这种身份验证模式时, ...

  4. 说说Asp.net 身份验证、授权

    观其大略: 1.       Asp.net 是依存于 IIS 的一个服务,说到 Asp.net 的安全相关的话题当然要有一个整体上的思路: IIS 接收 - > IIS 验证 - > I ...

  5. ASP.NET身份验证——Windows身份认证

    细说ASP.NET Windows身份认证 上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使 ...

  6. ASP.NET身份验证——Form身份认证

    细说ASP.NET Forms身份认证 用户登录是个很常见的业务需求,在ASP.NET中,这个过程被称为身份认证. 由于很常见,因此,我认为把这块内容整理出来,与大家分享应该是件有意义的事. 在开发A ...

  7. ASP.NET Web API身份验证和授权

    英语原文地址:http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-a ...

  8. ASP.NET MVC中的身份验证

    传统的登录验证方式,是通过将用户的登录状态信息保存在服务端的Session中,再利用客户端浏览器的Cookie保存SessionID,这样浏览器每次在向服务端发起请求时,都会携带该Cookie值,服务 ...

  9. asp.net中常用的几种身份验证方式

    前言 在B/S系统开发中,经常需要使用"身份验证".因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域 ...

  10. HttpMoudle实现用户身份验证

      查看文章   HttpMoudle实现用户身份验证 2009-12-04 19:37 参考自小白.net的HttpMoudle实现用户身份验证 下表列出了在 IIS 7.0 集成模式下运行的 AS ...

最新文章

  1. LeetCode-337 House Robber III
  2. spring aop记录日志方案设计
  3. boost::hana::minimum.by用法的测试程序
  4. LeetCode学习记录(4-6)
  5. Eclipse中代码自动提示功能设置
  6. VS快速定位文件、代码插件——DPack
  7. 创意视觉应用︱基于深度学习的CVaaS计算机视觉即服务案例(Computer Vision as a Service)
  8. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)
  9. C++ primer plus 第六版 第十一章 复习题
  10. 烽火服务器查询服务器型号,烽火服务器应该起的进程
  11. python数据分析处理:PUBG Finish Placement Prediction
  12. 【基础知识①】计算机网络知识
  13. 迅雷种子为什么php文件后缀,迅雷BT文件后缀是什么?
  14. 正方教务系统新版php,正方教务系统最新sql注射漏洞修复 | CN-SEC 中文网
  15. 邮件中html内嵌图片,邮件内嵌html
  16. Gulp老矣 尚能饭否
  17. HDFS RBF(基于路由的federation)的全局配额管理方案
  18. 挂号信经过几次签收最终送达收件人?
  19. HTTP协议通信相关资料(做笔记)
  20. JPEG图像文件格式

热门文章

  1. 数据结构基本操作_【算法与数据结构 03】数据处理的基本操作——增删查
  2. 自组织特征映射网络1
  3. 2021-09-1017. 电话号码的字母组合
  4. 2021-09-03Dien
  5. 2021-08-25Prompt
  6. 345.反转字符串中的元音字母
  7. 过拟合的含义、出现原因及解决方案
  8. 将梯度下降运用到线性回归
  9. 【知识图谱系列】基于Random Propagation的深度图神经网络
  10. 最近写mapreduce程序从hbase中抽取程序遇到的一些问题