zoukankan      html  css  js  c++  java
  • 通行证漫谈(不断补充)


         提前通行证,首先想到的是,经常用的网易的站内通行证,一处登陆,畅通无阻,怎么样,很方便吧?
          所以,在多系统中,该做法很是盛行,比如在企业级系统应用中。
         提个概念,那就是“单点登录”:
         单点登录(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)

             {

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

    }

     

     


       
  • 相关阅读:
    通过域名方式决定使用哪个数据库
    OpenERP/Odoo命令行参数
    修改pip源
    解决python "Non-ASCII character"错误
    Synergy 鼠标和键盘共享软件
    java 线程复习笔记
    常用设计模式--代理模式
    数据结构--二叉树
    mysql 索引的数据结构(B树和B+树)
    JS更改树型json的key键
  • 原文地址:https://www.cnblogs.com/yhb199/p/1536643.html
Copyright © 2011-2022 走看看