提前通行证,首先想到的是,经常用的网易的站内通行证,一处登陆,畅通无阻,怎么样,很方便吧?
      所以,在多系统中,该做法很是盛行,比如在企业级系统应用中。
     提个概念,那就是“单点登录”:
     单点登录(Single Sign On),简称为 SSO,是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
是目前比较流行的企业业务整合的解决方案之一。
     多说点,其实现机制:
     当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。
  可以看出,要实现SSO,需要以下主要的功能:
  所有应用系统共享一个身份认证系统;
  所有应用系统能够识别和提取ticket信息;
  应用系统能够识别已经登录过的用户,能自动判断当前用户是否登录过,从而完成单点登录的功能。
  其中统一的身份认证系统最重要,认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。
   补充一下:单点登录的实质就是是含有身份验证票的Cookie能在项目间共用。 
      asp.net提供的验证方法:
     ASP.NET 的安全认证,共有“Windows”“Form”“Passport”“None”四种验证模式。
 windows验证即“IIS验证”,因为它主要是通过IIS实现的,毕竟用户请求页面时,首先遇到的是IIS,之后由IIS交给asp.net应用程序,因为iis赋予的身份由windows用户定义的,所以又叫windows验证;
“Windows”与“None”没有起到保护的作用,不推荐使用;
    “Form”“Passport” 之间,前者,“Form”验证用的广泛一些,重点了解一下。
Form验证是提交给服务器做的;步骤如下:
1、客户请求站点被保护的页面;
2、如果请求没有包含有效的认证cookie,web服务器将把用户重定向到web.config文件Authentication标签的LoginURL属性指定的URL,该URL提供一个供用户登录的表单;
3、认证被输入到表单中,并通过表单传送并被提交;
4、如果认证有效,则asp.net程序在本地创建一个认证cookie;
5、之后,用户被重定向到最初请求的页面;
认证设置成功之后,以后的请求自动被认证;
认证有效期:关闭浏览器或会话结束;

passport验证是通过订阅微软应用程序完成的;
   (所谓认证的通过与否,其实质就是检测有无发放有效的Cookie,使用Form也好,运用Passport也罢,都是Cookie在起作用。也就是说,我们只要把有效的Cookie在登录后一次性发放给客户端就得了。

使用Form验证方法实现单点登录简单示例:

一、修改 Web.config

1、  打开项目中的Web.config;

2、  找到 <authentication mode="Windows" /> 把它改成:

<authentication mode="Forms">

<forms loginUrl="Login.aspx" name=".ASPXAUTH"></forms>//Login.aspx为登录页面;

</authentication>

3、  找到<authorization> <allow users="*" /></authorization>改成

<authorization><deny users="?"></deny></authorization>

<authentication mode="Forms">

<forms loginUrl="Login.aspx" name=".APSX"></forms>

<deny users="?"></deny>

</authentication>

二、 编写 .cs 代码——登录与退出

1、  登录代码:

a、   private void Btn_Login_Click(object sender, System.EventArgs e)

{

if(this.Txt_UserName.Text=="admin" && this.Txt_Password.Text=="admin")

{

System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.Txt_UserName.Text,false);

}

}

b、  private void Btn_Login_Click(object sender, System.EventArgs e)

{

if(this.Txt_UserName.Text=="admin" && this.Txt_Password.Text=="admin")

{

System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false);

Response.Redirect("Default.aspx");

}

}

以上两种都实现发放验证后的 Cookie ,通过验证的重要步骤:

方法 a) 指验证后返回登录前的请求页面;

方法 b) 则是分两步走:通过验证后就直接发放 Cookie ,跳转页面将由程序员自行指定(Response.Redirect("Default.aspx")),此方法多用于 Default.aspx 使用框架结构的系统;
2、  退出代码:

private void Btn_LogOut_Click(object sender, System.EventArgs e)

{

System.Web.Security.FormsAuthentication.SignOut();

}
三、如何判断验证与否及获取验证后的用户信息

一种方法用 Session 来判断;
    还有一种方法,且看下面代码:

if(User.Identity.IsAuthenticated)

{

//你已通过验证,知道该怎么做了吧?

}

转载于:https://www.cnblogs.com/yhb199/archive/2009/08/01/1536643.html

通行证漫谈(不断补充)相关推荐

  1. 漫谈 REST 架构风格

    1. 什么是REST REST是REpresentational State Transfer的缩写,来源于R. Fielding的一篇博士论文:<Architectural Styles an ...

  2. 漫谈 C++ 的各种检查

    以下文章来源于BOTManJL ,作者BOT Man What you don't use you don't pay for. (zero-overhead principle)  -- Bjarn ...

  3. MySQL - InnoDB特性 - Buffer Pool漫谈

    转载自  MySQL - InnoDB特性 - Buffer Pool漫谈 缓存管理是DBMS的核心系统,用于管理数据页的访问.刷脏和驱逐:虽然操作系统本身有page cache,但那不是专门为数据库 ...

  4. 王元院士漫谈哥德巴赫猜想

    王元在作完题为<漫谈哥德巴赫猜想>的报告后给数学爱好者签名 .王林/摄 "我劝大家现在不要去做哥德巴赫猜想,还是把基础打好.如果要搞这个问题,最低限度,你应该有大学数学专业毕业生 ...

  5. hive中实现行转列_漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

    全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别. 举一个具体的应用场景,来设计并实现一份拉链表,最后并通 ...

  6. 漫谈边缘计算(二):各怀心事的玩家

    前一篇文章(漫谈边缘计算(一):边缘计算是大势所趋)提到我对边缘计算的理解,认为边缘计算是在一定程度上弥补传统云计算的不足,相对于传统的全集中模式的云计算中心,边缘计算节点可以在现场终端侧,也可以在终 ...

  7. 互联网架构设计漫谈 (3)

    互联网架构设计漫谈 (3) 中小型互联网公司在并发量不高的情况下可以选用软件负载均衡作为代理层,他们通常和更靠外的"接入层"的硬件负载均衡器合作,为用户提供更好的服务.软件负载均衡 ...

  8. 漫谈CRM体系化建设2 – 如何开发客户?

    <漫谈CRM体系化建设>系列共分五篇,在第一篇,我们主要介绍了企业客户管理的基本概念和要点,重点讲述了业务,是理解CRM体系建设的基础.本文是第二篇,讨论企业客户开发问题,剩下三篇将在近期 ...

  9. 架构漫谈(八):从架构的角度看如何写好代码 + 我的思考

    我的总结:当先前对于利益相关者的关系理清了,系统基本架构和测试方法等也有了,进入实际Coding阶段.在Coding前,需要我们考虑好业务功能的分配,关注于功能会频繁变更的部分,为未来的维护和扩展打下 ...

最新文章

  1. 服务器修改网卡,美国服务器CentOS 6.x修改网卡名称的方法
  2. android开发 获取相册名称_Android开发之获取相册照片和获取拍照照片
  3. python学习方向-Python方向(转载)
  4. Protege5.0.0入门学习
  5. 搜索---广度优先遍历、深度优先遍历、回溯法
  6. java创建型_Java创建型模式
  7. iPad iPhone程序增加和删除启动画面
  8. GaussDB(for MySQL)如何在存储架构设计上做到高可靠、高可用
  9. Oracle物化视图和普通视图区别
  10. 【微型计算机原理与接口技术】80X86微处理器发展与内部结构
  11. python环境准备_一键实现Python环境准备
  12. 查询Linux的公网及内网IP
  13. webpack打包非模块化js
  14. 索引和数据完整性约束的总结
  15. 2.3安装工业相机SDK及测试
  16. 关于TOPCODER的所有挑战、任务和GIG工作机会
  17. android apk格式,apk是什么文件格式?.apk文件怎么打开?
  18. 我喜欢你时的内心活动
  19. ZZNUOJ_C语言1024:计算字母序号(完整代码)
  20. 机器学习贝叶斯学习心得_贝叶斯元学习就是您所需要的

热门文章

  1. 51单片机初学者对定时器/计数器寄存器的理解
  2. 某城商行超融合建设:从方案设计到融合部署
  3. mmdection评价结果
  4. 【论文阅读】注意力综述(自注意力)
  5. 用科学的角度解剖算法分析
  6. MDPI高级搜索——包含“Appendix”的论文
  7. 获取年、季度、月份的开始时间和结束时间,到时分秒
  8. Python去除空格
  9. Laravel 查询 多个or或者and条件
  10. UE4导入3dmax模型并在场景中添加第三人称角色