zoukankan      html  css  js  c++  java
  • SSO 登录功能的实现

    一、引言

    自己早晚都会碰到的问题。

    当需要到分离多站点多应用的时候,都是希望用户只要在一个站点登录,其它所有的应用站点都是已登录的状态。

    查了下新浪与淘宝的登录的资料,自己实现了一个并做下记录。

    二、思路

    1.当用户在各个站点点击需要登录认证的页面时,都会跳转到认证服务器(SSO Server)的登录页面。

    2.用户在SSO Server进行登录操作并成功时,在SSO Server写入Cookie。

    3.SSO Server生成一个Ticket发送给应用服务器。

    4.应用服务器写好一个用于接受SSO Server发送过来的Ticket的登录方法。

    5.应用服务器根据Ticket将登录Cookie写入到应用服务器里。

    三、实现

    1.做好认证服务器的登录功能。

    2.用户在认证服务器登录成功时:
    2.1.情况一:跳转至成功页面,该页面引入一个JS文件,该文件的地址是应用服务器的登录地址。
    在这里使用JS来加载登录地址是可以动态调用应用服务器的登录地址的。
    例:
     <script src="http://b.com/user/login?ticket=dasfdslafjlsdaflsdfj"></script> 
    

      

    2.2.情况二:使用 AJAX 来处理时,在登录成功后自动跳转前,动态加载 JS 文件即可。JS文件的地址同样是应用服务器的登录地址。
    例:
    success: function (data) {
    document.write("<script src='" + data.Ticket + "'></script>");
     
    //登录成功时,跳转到到指定页面。
    window.location.href = resultUrl;
    }
    3.在应用服务器写上一个登录方法,该方法用于接受认证服务器发送过来的 Ticket,认证成功时写入应用服务器站点的 Cookie。
    我自己使用的方法是:

    1.认证服务器登录成功后,对用户账号进行加密,将加然后的字符串做为 ticket 发送给应用服务器。

    2.应用服务器接受到 ticket 后对它进行解密,并对自己的用户权限系统进行登录认证,认证成功则写入 Cookie.

    3.应用服务器的登录页面要加上P3P,否则会有安全问题无法写入 Cookie。
     
    this.Response.AddHeader("P3P", "CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"");
  • 相关阅读:
    DB2完美卸载
    protobuf2.5 iphone5s中崩溃的问题
    由fprintf和printf看C语言三种标准流
    AIR加载PDF
    使用二叉堆实现优先队列
    11636
    apache archiva安装教程
    WP独立文件资源字典
    常用软件架构模式(收集)
    MATLAB——单层感知器
  • 原文地址:https://www.cnblogs.com/cjnmy36723/p/3892776.html
Copyright © 2011-2022 走看看