zoukankan      html  css  js  c++  java
  • 单点登录SSO:图示和讲解

    敢说最准确的单点登录图示,因为:

    我严格对照所画时序图的每个步骤,开发了完整的跨域单点登录范例;

    时序图绘出的所有服务端步骤,都在代码中逐一标注对应,跟踪调试代码就能两相对照,深入理解流程;

    跨域Web SSO的核心在于写cookie、URL传参策略。其参与对象多、逻辑分支繁杂也难倒很多人。所见的其它教程图示往往对cookie和传参语焉不详,让人初看简单明了、细想很困惑。我做的时序图详细展现了这些关键细节。

    话不多说,先上图吧。

    一 示例运行效果动画

    百宝门跨域Web SSO方案演示

    图一 百宝门跨域Web SSO方案演示

    二 跨域Web SSO时序图

    会比其它单点登录教程暴露更多比较重要的细节,没基础初看可能会晕。请先读完下面的知识点讲解,再回头理解本图,尤其是注意各个URL传参、以及写cookie的动作。

    该图也将作为跨域Web SSO原理的核心,在后继相关文章中反复引用到。

    最准确的SSO时序图

    图二 跨域Web SSO时序图。包含cookie、URL具体跳转策略。是透彻理解和掌握跨域Web单点登录的核心。

    三 单点登录代码截图

    代码逻辑严格和时序图对应,在注释中标明了对应的步骤编号:

    单点登录SSO代码

    图三 单点登录范例代码。和时序图逐一对应标注

    四 几个基本概念

    4.1  什么是跨域Web SSO。

    域名通过“.”号切分后,从右往左看,不包含“.”的是顶级域名,包含一个“.”的是一级域名,包含两个“.”的是二级域名,以此类推。

    例如对网址http://www.cnblogs.com/baibaomen,域名部分是www.cnblogs.com。用“.”拆分后从右往左看:

    ”com”不包含“.”,是顶级域名; “cnblogs.com”包含一个“.”,是一级域名;www.cnblogs.com包含两个“.”,是二级域名。

    跨域Web SSO指的是针对Web站点,各级域名不同都能处理的单点登录方案。

    4.2  浏览器读写cookie的安全性限制:一级或顶级域名不同的网站,无法读到彼此写的cookie。

    所以baidu.com无法读到cnblogs.com写的cookie。

    一级域名相同,只是二级或更高级域名不同的站点,可以通过设置domain参数共享cookie读写。这种场景可以选择不跨域的SSO方案。

    域名相同,只是https和http协议不同的URL,默认cookie可以共享。知道这一点对处理SSO服务中心要登出

    4.3  http协议是无状态协议。浏览器访问服务器时,要让服务器知道你是谁,只有两种方式:

    方式一:把“你是谁”写入cookie。它会随每次HTTP请求带到服务端;

    方式二:在URL、表单数据中带上你的用户信息(也可能在HTTP头部)。这种方式依赖于从特定的网页入口进入,因为只有走特定的入口,才有机会拼装出相应的信息,提交到服务端。

    大部分SSO需求都希望不依赖特定的网页入口(集成门户除外),所以后一种方式有局限性。适应性强的方式是第一种,即在浏览器通过cookie保存用户信息相关凭据,随每次请求传递到服务端。本文的方案是第一种。

    五 本单点登录的应用场景涉及的站点和页面

    5.1  SSO服务站点,图中是sso.baibaomen.com;

    5.2  集成SSO的子站点一。图中是java-client.net;

    5.3  集成SSO的子站点二。图中是php-client.cn;

    5.4  SSO服务站点有登录/注销页面login.html,以及基于.NET的几个handler:sso/login/validate/logout。

    为了说清楚在各子站点首次访问和后继访问的单点登录流程,分别做了两个需登录访问的页面:

    java-client.net的两个页面是auth-required.jsp和auth-required2.jsp;php-client.cn的两个页面是auth-required.php和auth-required2.php。

    六 重点理解:单点登录的核心步骤

    本节是帮助各位速掌握单点登录的核心步骤。为避免过多信息干扰理解,略去了非主干的细节。为透彻把握细节,请在理解本节后,再仔细对照学习SSO时序图。

    6.1  用户未登录时访问子站一,子站一服务器检测到用户没登录(没有本站session,因为没传过来session对应cookie),于是通知浏览器跳转到SSO服务站点,并在跳转的URL参数中带上当前页面地址,以便登录后自动跳转回本页。

    6.2  SSO服务站点检测到用户没有登录,于是显示登录界面。

    用户提交登录请求到服务端,服务端验证通过,创建和账号对应的用户登录凭据(token)。

    然后,服务端通知浏览器把该token作为SSO服务站点的cookie存储起来,并跳转回子站一,跳回子站一的URL参数中会带上这个token。

    6.3  浏览器在写SSO服务站点cookie后,跳转回子站一。

    子站一服务端检测到浏览器请求的URL中带了单点登录的token,于是把这个token发到SSO服务站点验证。

    SSO服务端站点拿token解密出用户账号,把账号信息中允许子站一访问的部分返回给子站一。

    子站一根据返回的信息生成用户在本站的会话,把会话对应cookie写入浏览器,从而完成在本站的登入以及会话保持。之后用户访问再子站一时,都会带上这个cookie,从而保持在本站的登录状态。

    6.4  用户再访问子站二。子站二服务器检测到用户没登录,于是通知浏览器跳转到SSO服务站点。

    6.5  浏览器访问SSO服务站点时会带上上述6.2环节创建的token这个cookie。SSO服务站点根据该token能找到对应用户,于是通知浏览器跳转回子站二,并在跳转回去的URL参数中带上这个token。

    6.6  子站二服务端检测到浏览器请求的URL中带上了单点登录的token,于是又会走上述6.3对应步骤,完成用户在本站的自动登录。

    单点登出的流程,将在下篇完整代码实例中,一并讲解。

    为方便大家讨论交流,除了时序图,本文各章节也作了详细编号。有疑问的童鞋,请尽可能在回复中包含有疑问部分的编号,这样可以快速定位。

    原文地址:http://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html 。转载须保留本链接。

    本系列各篇链接:

    单点登录-SSO:概述与示例 http://www.cnblogs.com/baibaomen/p/sso.html

    单点登录-SSO:图示和讲解 http://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html

    单点登录-SSO:一键运行的完整代码 http://www.cnblogs.com/baibaomen/p/sso-full-code.html

    本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

    我的博客欢迎复制共享,但在同时,请保留原文地址以及我的署名权百宝门-SSO顾问,并且,不得用于商业用途。

    如您有任何疑问或者授权方面的协商,请给我邮件。 


    博客园专栏:
    百宝门-SSO顾问

    我的公众号“百宝门”



  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html
Copyright © 2011-2022 走看看