SSO方案中太多平行对称的分支选择,就像博而赫斯那小径分岔的花园。刚手写完一个超迷你劲袖珍的SSO,顺着 SAML2.0和OpenID的规范,记录一下这些分岔点:

  1. 流程是从身份提供者还是消费者发起?
    身份提供者,也就是SSO Server了,又叫Id Provider,简称Idp。而身份消费者,SSO Client,在SAML里叫做Sp。
    身份提供者发起流程中,用户登录进SSO Server,SSO Server展现一个Portal/菜单,上有到各SSO Client的URL若干,每个URL上都已经加了身份信息的料。
    身份消费者发起流程中,Portal/菜单里是无料的普通URL(甚至用户直接就先跑去了Client的网站),SSO Client发现本地Session里没有用户的身份信息,只好redirect重返SSO Server,最后Server再以有料的URL跳转回去。
    显然,前一种流程少了两次Redirect,速度更快,但Portal/菜单中的每个URL都深深的耦合着SSO Sever,又或者,有时根本就没有这么一个中央Portal的存在。
  2. URL参数中传送身份信息还是仅仅是指针
    SSO Server 向 Client跳转时,可以大大方方的把身份信息放在URL参数里直接传输,也可以小心翼翼的只扔过来一个随机字符串(SAML中叫 Artifact),Client拿着这个随机字串再到后台偷偷摸摸用WebService/REST接口问SSO Server拿到完整的身份信息。
    显然,前一种方式少了一次后台查询,速度更快,但没有后一种方式安全,后一种方式的WebService/REST接口还可传输任意格式的很多很多的信息。
  3. 安全措施是全文加密还是仅仅签名
    有人喜欢全文(再加一个nonce )加密成长长一段密文,心中充满了安全感。也有人大胆的明文传输内容,只在最后加个签名来防伪(签名用简单的明文+密钥散列,或者HMAC加密散列算法)
    前者用户只看到长长一段火星文,不会让用户偷窥到什么,但字串暴长且加解密本身比较消耗CPU。
  4. SSO Client会自己解密/比对签名吗?
    一般,SSO Client会根据约定自己解密或根据明文生成签名进行比对,还要负责验证那个nonce不会已被使用或者已经超时等等。
    但也会可以有很懒的client,不懂这么复杂的安全加密算法,直接把收到的内容在后台用WebService/Rest接口发回给SSO Server帮忙搞定。

    刚刚手写那个SSO,身份提供者发起流程,在URL参数中传输加密的身份信息,由SSO Client自行解密,so,超简单...

SSO中的Pattern相关推荐

  1. java pattern matches,Java正则表达式中的Pattern.matches()方法

    java.util.regex.Pattern.matches()方法匹配正则表达式和给定的输入.它有两个参数,即正则表达式和输入.如果正则表达式和输入匹配,则返回true,否则返回false. 给出 ...

  2. 利用 HttpClient 实现 WI/SSO 中的 Eager Sign in

    from http://www.ibm.com/developerworks/cn/web/wa-lo-wisso/index.html 利用 HttpClient 实现 WI/SSO 中的 Eage ...

  3. java中正则表达式Pattern与Matcher类使用详解(find、group)

    一.Pattern的使用 这个使用很简单. 1.把正则表达式编译为Pattern对象: 比如: Pattern compile = Pattern.compile("http://([a-z ...

  4. STIL中的Pattern

    PatternBurst basic_burst {SignalGroups more; #指定了前面定义的pin组PatList { basic; } #指定了下面定义的pattern } //en ...

  5. python中的pattern什么意思_正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?=pattern)和(?!pattern)...

    (?:pattern) ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 (?:)表示非捕获分组,和捕获分组唯一 ...

  6. java @literal_Java中的Pattern LITERAL字段的示例

    启用模式的文字分析.在此,所有字符(包括转义序列和元字符)都没有任何特殊含义,它们被视为文字字符. 例如,通常,如果您在给定的输入文本中搜索正则表达式" ^ This",则它将匹配 ...

  7. java pattern split,Java中的Pattern splitAsStream()方法及其示例

    java.util.regex包的Pattern类是正则表达式的编译表示. 此类的splitAsStream()方法接受一个CharSequence对象,该对象将输入字符串表示为参数,并且在每次匹配时 ...

  8. html5中的pattern属性(表单验证input)

    pattern用于验证表单输入的内容,通常HTML5的type属性,比如email.tel.number.data类.url等,已经自带了简单的数据格式验证功能了,加上pattern后,前端部分的验证 ...

  9. 聊聊单点登录(SSO)中的CAS认证

最新文章

  1. 58 Node.js中操作mongoDB数据库
  2. jenkins 集成 docker tomcat 自动化测试脚本
  3. activiti源码编译
  4. 取得数组中的随机数random.nextInt(index)
  5. 开发日记-20190422 关键词 插件化(1)概述
  6. JVM -- Java虚拟机
  7. 计算机移动设备有限公司,使计算机,移动设备更节能
  8. [剑指offer][JAVA][第62题][约瑟夫环][LinkedList vs ArrayList]
  9. 里能嵌jquery吗_白芸豆里的淀粉阻断成分,能帮助减肥是真的吗?
  10. 记录一次网盘资源不给提取码的经历!另类编程思维,Python破之!
  11. 都是执行软件测试,差异点在那里
  12. 【常用传感器】DS18B20温度传感器原理详解及例程代码
  13. 【Bat】内外网切换
  14. android 背景渐变颜色代码,Android开发——实现背景颜色渐变效果
  15. android 百度获取经纬度,百度地图API获取经纬度的方法
  16. 图形 1.3 纹理的秘密
  17. ^_^Hostname openapi.alipaydev.com not verified:
  18. NI PXI-6221(16路模拟输入)校准小记
  19. 前方是绝路,希望在转角!
  20. nRF52832学习记录(十、PWM 脉冲调制)

热门文章

  1. 刷脸支付:5G时代下的新型支付模式
  2. java实现图片转pdf文件
  3. 除了迅雷还有什么靠谱的下载软件
  4. 【darknet-yolo系列】yolov3 训练模型操作流程(包含所有资源下载)
  5. 大批,程序员被劝退!
  6. 一个系统测试的完整过程
  7. iOS HTTPS证书不受信任解决办法
  8. 关于flask入门教程-ajax+echarts实现大屏展示
  9. 灰色关联度矩阵--基于Matlab
  10. 你真的会搜索资源吗?我来把我的资源搜索心得告诉你...