• Single Sign On (单点登陆) 以及Session过期问题的解决方案


    1.         Single Sign On

    目的:多个Web应用有统一的登陆以及一次登陆完成所有Web应用的认证。

    原理:利用Form认证,认证后的Cookie,使得参与Web应用的都具有一组相同的用于加密与验证加密的密钥。加密与验证加密的密钥位于 Machine.config 中,修改  <system.web> 节点下的 <machineKey> 节点属性。

    应用范围:位于同一服务器上的各个Web应用。

           ---login.aspx

                if(FormsAuthentication.Authenticate(txtUser.Text,txtPassword.Text))

             {

                  FormsAuthentication.RedirectFromLoginPage(txtUser.Text,false);

             }

             else if(用户认证)

             {

                  Session["UserName"]=txtUser.Text;

                  FormsAuthentication.SetAuthCookie(txtUser.Text,false);

                  FormsAuthentication.RedirectFromLoginPage(txtUser.Text,false);

             }

             else

                  Response.Write("Login Error...");

             }

           --Web.Config配置

           <authenticationmode="Forms">

    <formsname="Shmzh.SingleSignOn"protection="Encryption"timeout="60"loginUrl="login.aspx"/>

        </authentication>

         <machineKey

             validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572_487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"

             decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"

             validation="SHA1">

         </machineKey>

         <authorization>

             <denyusers="?"></deny>

         </authorization>

               ---default.aspx

           --Web.Config配置

           <authentication mode="Forms">

           <forms name="Shmzh.SingleSignOn" protection="Encryption" timeout="60" loginUrl="\SSO\Login.aspx" />

        </authentication>   

         <machineKey

             validationKey= "C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"

             decryptionKey= "8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"

             validation="SHA1">

         </machineKey>

           <authorization>

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

           </authorization>

                 ---default.aspx

    --Web.Config配置,每一个站点的配置同

                ---default.aspx

           --Web.Config配置,每一个站点的配置同

           ---default.aspx

           --Web.Config配置,每一个站点的配置同

          

           Default.aspx中的代码

           if(User.Identity.IsAuthenticated)    //判断是否已经验证

           {

                  //用户验证以及初始化Session

                  User.Identity.Name 就是登录的用户

           }

    2.         Session过期问题

    通过设置Session过期时间来完成

    a>     IIS中设置过期时间

    b>     Web.Config中设置时间

        <sessionStatemode="InProc"cookieless="false" timeout="20/>

    实例2:

    HttpContext.Current.User.Identity.IsAuthenticated=false;

    HttpContext.Current.User.Identity.Name==""

    解释:当用户登录时,服务器为确认客户端通过验证要通过cookie向客户端写验证(Authenticat)信息,在登录页面刚验证完成后服务器 还没有把cookie 回发到Client,所以会没有值,当服务器第二次Response的时候,就会从客户端读取Cookie,要想有此Cookie还要在 web.config文件中配置相应的参数

    <system.web>
        <authentication mode="Forms">
          <forms domain="bokoAdmin" timeout="20" loginUrl="Login.aspx" path="/"></forms>
        </authentication>

       <authorization>
          <allow users="*"/>
        </authorization>

    <system.web>

    程序验证:

                if (Membership.ValidateUser(tbx_username.Text.TrimEnd(), tbx_password.Text.TrimEnd()))
                {
                   
                    FormsAuthentication.SetAuthCookie(tbx_username.Text.TrimEnd(), true,FormsAuthentication.FormsCookiePath);
                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
        1, tbx_username.Text, DateTime.Now, DateTime.Now.AddMinutes(20), false, tbx_username.Text);
                    // generate new identity
                    FormsIdentity identity = new FormsIdentity(ticket);
                    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
                    // write to client.
                    Response.Cookies.Add(cookie);

                    }

    其中加粗体为主要语句,有此一句就可以实现HttpContext.Current.User.Identity.IsAuthenticated=true;

  • 相关阅读:
    Flume实现写入es
    JMeter创建上传文件脚本
    JQuery的dataTable实现分页
    Dubbo服务发布机制-源码学习
    spring容器启动过程(Spring源码阅读)
    Hadoop学习笔记一(HDFS架构)
    hbase修改表TTL
    hive复制表
    提交docker镜像到远程仓库
    centos7 安装ssh
  • 原文地址:https://www.cnblogs.com/yuhanzhong/p/2440634.html
Copyright © 2020-2023  润新知