• 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"");
  • 相关阅读:
    django虚拟环境中报E: 无法定位软件包 sqliteman
    创建django项目
    Django虚拟环境安装
    python学习笔记(三)
    python学习笔记(二)
    python学习笔记(一)
    python 类属性和实例属性
    决策树的基本ID3算法
    KNN算法的简单实现
    webClient
  • 原文地址:https://www.cnblogs.com/cjnmy36723/p/3892776.html
Copyright © 2020-2023  润新知