SSO中的Pattern
SSO方案中太多平行对称的分支选择,就像博而赫斯那小径分岔的花园。刚手写完一个超迷你劲袖珍的SSO,顺着 SAML2.0和OpenID的规范,记录一下这些分岔点:
- 流程是从身份提供者还是消费者发起?
身份提供者,也就是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的存在。 - URL参数中传送身份信息还是仅仅是指针 ?
SSO Server 向 Client跳转时,可以大大方方的把身份信息放在URL参数里直接传输,也可以小心翼翼的只扔过来一个随机字符串(SAML中叫 Artifact),Client拿着这个随机字串再到后台偷偷摸摸用WebService/REST接口问SSO Server拿到完整的身份信息。
显然,前一种方式少了一次后台查询,速度更快,但没有后一种方式安全,后一种方式的WebService/REST接口还可传输任意格式的很多很多的信息。 - 安全措施是全文加密还是仅仅签名 ?
有人喜欢全文(再加一个nonce )加密成长长一段密文,心中充满了安全感。也有人大胆的明文传输内容,只在最后加个签名来防伪(签名用简单的明文+密钥散列,或者HMAC加密散列算法)
前者用户只看到长长一段火星文,不会让用户偷窥到什么,但字串暴长且加解密本身比较消耗CPU。 - SSO Client会自己解密/比对签名吗?
一般,SSO Client会根据约定自己解密或根据明文生成签名进行比对,还要负责验证那个nonce不会已被使用或者已经超时等等。
但也会可以有很懒的client,不懂这么复杂的安全加密算法,直接把收到的内容在后台用WebService/Rest接口发回给SSO Server帮忙搞定。刚刚手写那个SSO,身份提供者发起流程,在URL参数中传输加密的身份信息,由SSO Client自行解密,so,超简单...
SSO中的Pattern相关推荐
- java pattern matches,Java正则表达式中的Pattern.matches()方法
java.util.regex.Pattern.matches()方法匹配正则表达式和给定的输入.它有两个参数,即正则表达式和输入.如果正则表达式和输入匹配,则返回true,否则返回false. 给出 ...
- 利用 HttpClient 实现 WI/SSO 中的 Eager Sign in
from http://www.ibm.com/developerworks/cn/web/wa-lo-wisso/index.html 利用 HttpClient 实现 WI/SSO 中的 Eage ...
- java中正则表达式Pattern与Matcher类使用详解(find、group)
一.Pattern的使用 这个使用很简单. 1.把正则表达式编译为Pattern对象: 比如: Pattern compile = Pattern.compile("http://([a-z ...
- STIL中的Pattern
PatternBurst basic_burst {SignalGroups more; #指定了前面定义的pin组PatList { basic; } #指定了下面定义的pattern } //en ...
- python中的pattern什么意思_正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?=pattern)和(?!pattern)...
(?:pattern) ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 (?:)表示非捕获分组,和捕获分组唯一 ...
- java @literal_Java中的Pattern LITERAL字段的示例
启用模式的文字分析.在此,所有字符(包括转义序列和元字符)都没有任何特殊含义,它们被视为文字字符. 例如,通常,如果您在给定的输入文本中搜索正则表达式" ^ This",则它将匹配 ...
- java pattern split,Java中的Pattern splitAsStream()方法及其示例
java.util.regex包的Pattern类是正则表达式的编译表示. 此类的splitAsStream()方法接受一个CharSequence对象,该对象将输入字符串表示为参数,并且在每次匹配时 ...
- html5中的pattern属性(表单验证input)
pattern用于验证表单输入的内容,通常HTML5的type属性,比如email.tel.number.data类.url等,已经自带了简单的数据格式验证功能了,加上pattern后,前端部分的验证 ...
- 聊聊单点登录(SSO)中的CAS认证
最新文章
- 58 Node.js中操作mongoDB数据库
- jenkins 集成 docker tomcat 自动化测试脚本
- activiti源码编译
- 取得数组中的随机数random.nextInt(index)
- 开发日记-20190422 关键词 插件化(1)概述
- JVM -- Java虚拟机
- 计算机移动设备有限公司,使计算机,移动设备更节能
- [剑指offer][JAVA][第62题][约瑟夫环][LinkedList vs ArrayList]
- 里能嵌jquery吗_白芸豆里的淀粉阻断成分,能帮助减肥是真的吗?
- 记录一次网盘资源不给提取码的经历!另类编程思维,Python破之!
- 都是执行软件测试,差异点在那里
- 【常用传感器】DS18B20温度传感器原理详解及例程代码
- 【Bat】内外网切换
- android 背景渐变颜色代码,Android开发——实现背景颜色渐变效果
- android 百度获取经纬度,百度地图API获取经纬度的方法
- 图形 1.3 纹理的秘密
- ^_^Hostname openapi.alipaydev.com not verified:
- NI PXI-6221(16路模拟输入)校准小记
- 前方是绝路,希望在转角!
- nRF52832学习记录(十、PWM 脉冲调制)