单点登陆系统对比

作者:刘宾, thomas_liub@hotmail.com
请尊重作者著作权,转载请注明出处,谢谢!


SSO笔记

典型的SSO机制

Kerberos

  • 麻省理工大学发明
  • 客户端/服务器结构与DES加密技术,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证
  • 一种应用对称密钥体制进行密钥管理的系统,支持SSO
  • 不适应互联网环境
  • UNIX 和 Windows 作为默认的安全认证服务集成进操作系统
  • 苹果的Mac OS X也使用了Kerberos的客户和服务器版本
  • Red Hat Enterprise Linux4 和后续的操作系统使用了Kerberos的客户和服务器版本

OAuth2

  • 名词解释
    • Third-party application:第三方应用程序,本文中又称"客户端"(client),即上一节例子中的"云冲印"。
    • HTTP service:HTTP服务提供商,本文中简称"服务提供商",即上一节例子中的Google。
    • Resource Owner:资源所有者,本文中又称"用户"(user)。
    • User Agent:用户代理,本文中就是指浏览器。
    • Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
    • Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
  • 授权模式
    • 授权码模式(authorization code)



      (A)用户访问客户端,后者将前者导向认证服务器。
      (B)用户选择是否给予客户端授权。
      (C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
      (D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
      (E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)

    • 简化模式(implicit)


    • 密码模式(resource owner password credentials)


    • 客户端模式(client credentials)


  • 令牌更新
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA

OpenID

  • OpenID 是一个以用户为中心的数字身份识别框架,它具有开放、分散性
  • 没有实现SSO, 没有验证所有party
  • 结合OAuth
  • 仅web应用

OpenID connect

  • 开源项目
  • 登陆访问步骤
    1. 【百度域】,初始访问服务,无授权码,无access token
      http://www.baidu.com
      
    2. 【CAS域】,网关发起重定向浏览器到CAS
      http://192.168.1.28:8091/openid/authorize?client_id=717771&redirect_uri=http://www.baidu.com&response_type=code&scope=openid%20email%20profile&state=123123
      
    3. 【CAS域】,无session id, CAS重定向授权(浏览器重定向)
      http://192.168.1.28:8091/accounts/login/?next=/openid/authorize%3Fclient_id%3D717771%26redirect_uri%3Dhttp%3A//www.baidu.com%26response_type%3Dcode%26scope%3Dopenid%2520email%2520profile%26state%3D123123
      
    4. 【CAS域】,用户登陆,登陆成功后设置CAS域session id到cookie
      http://192.168.1.28:8091/accounts/login
      http://192.168.1.28:8091/accounts/logout
      
    5. 【CAS域】,登陆后,跳回CAS授权
      http://192.168.1.28:8091/openid/authorize?client_id=717771&redirect_uri=http://www.baidu.com&response_type=code&scope=openid%20email%20profile&state=123123
      
    6. 【百度域】,重定向浏览器到访问服务,带授权码
      https://www.baidu.com/?state=123123&code=ed27cf5ee1ac4c8784126bbf825ccb45
      
    7. 【百度域】,网关根据授权码,获取token,code -> tokens,设置access token到cookie
      curl -X POST \
          -H "Cache-Control: no-cache" \
          -H "Content-Type: application/x-www-form-urlencoded" \
          "http://192.168.1.28:8091/openid/token/" \
          -d "client_id=717771" \
          -d "client_secret=1ac931638624e5d8ae002aaeaec4302031db92e7451edf36e0d008c9" \
          -d "code=ed27cf5ee1ac4c8784126bbf825ccb45" \
          -d "redirect_uri=http://www.baidu.com" \
          -d "grant_type=authorization_code"
      
      返回:
      {
          "access_token": "82b35f3d810f4cf49dd7a52d4b22a594",
          "token_type": "bearer",
          "expires_in": 3600,
          "refresh_token": "0bac2d80d75d46658b0b31d3778039bb",
          "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijc0NTU5ZGE1NTQzMTY4YzFiYTQ3OWJiMWFlMmRjMGRhIn0.eyJzdWIiOiIxIiwiaXNzIjoiaHR0cDovLzE5Mi4xNjguMS4yODo4MDkxL29wZW5pZCIsImF0X2hhc2giOiI2R0tQM1RfS09GcFBmNWh5bFNPMmxnIiwiZXhwIjoxNDkwNzUzODYxLCJhdXRoX3RpbWUiOjE0OTA2ODcxMTQsImlhdCI6MTQ5MDc1MzI2MSwiYXVkIjoiNzE3NzcxIn0.vzFWuo99uM2HK2TWML8zE5sLpEjg5NGSFMzxKbtYUrr_EDRghlZJwh1w8VHEzPDIbNfRfeOwqPC9nhbl2q1yJS1F8vJRrBVtBpyawLGqAr3_SBwA9Xx3AmZR5X8Xid-3SHqGu3n93gD-XbvP_gcvrdsfgmHJK5PWjqj1jA_5zMM"
      }
      
    8. 【百度域】,读取用户信息
      http://192.168.1.28:8091/openid/userinfo/?access_token=82b35f3d810f4cf49dd7a52d4b22a594
      
    9. 【百度域】,刷新token
      curl -X POST \
          -H "Cache-Control: no-cache" \
          -H "Content-Type: application/x-www-form-urlencoded" \
          "http://192.168.1.28:8091/openid/token/" \
          -d "client_id=717771" \
          -d "grant_type=refresh_token" \
          -d "refresh_token=0bac2d80d75d46658b0b31d3778039bb"
          -d "client_secret=1ac931638624e5d8ae002aaeaec4302031db92e7451edf36e0d008c9"
      
  • 登出访问步骤
    1. 【百度域】,浏览器访问百度域退出
      http://www.baidu.com/logout
      
    2. 【CAS域】,重定向浏览器到CAS域,携带CAS域session id
      http://192.168.1.28:8091/acconts/logout
      

webSSO

  • 适合本地资源和互联网融合,local, internet and cloud infrastructures

CAS

  • CAS协议流程,基础模式
    • TGT (ticket granting ticket):user name, TGC...
      • TGT 的存活周期默认为 120 分钟
    • TGC(ticket granting cookie)
      • TGC 是用户持有对自己身份信息的一种凭据
      • TGC 是 CAS Server 通过 SSL 方式发送给终端用户
    • ST(service ticket)
      • 在一段时间内失效,存活周期默认为5分钟
      • ST 只能使用一次
      • ST 是基于随机数生成的
CAS
  1. 浏览器访问应用A(CAS client)
  2. CAS client发现无ST,无session,重定向到CAS server
  3. 用户完成登陆认证
    1. 用户登陆
    2. CAS server生成TGT对象,加入cookie
    3. 分配ST,加入cookie
  4. 重定向回应用(CAS client),带TGC, ST
  5. 应用CAS client验证(ST,TGC)
  6. CAS server验证ST,返回username如成功
  7. CAS client建立用户session
  • CAS协议流程,代理模式
    • PGT, 是 CAS Client 端持有的对用户身份信息的一种凭据

CAS Vs OpenIDConnect

  1. CAS不支持OAuth2. Fackbook, Google, Yahoo采用OAuth2做认证, 而且目前85%认证系统采用OAuth2
  2. 大部分采用OAuth2的系统将来会采用OpenIDConnect
  3. CAS缺失很多功能,不支持feature
    1. 动态client注册,发现
    2. 用户claim, client claim
  4. Even SAML support is weak
  5. CAS实现多步骤认证困难,大部分是基于用户名/口令方式
  • 结论
    如果可能尽量用OpenIDConnect,在过度阶段可以采用SAML方案从CAS到OpenIDConnect。
    Conclusion

Like the little ant, OpenID Connect has high hopes. Where possible, use it. Make sure developers understand the roadmap for your organization: your domain, like all the other domains on the Internet, will adopt OpenID Connect. Use SAML to fill in the gaps until all the OpenID Connect libraries and web server plugins are available. SAML is going to be around much longer than CAS, so its a better bridge solution. Use CAS only as a last resort. You should require products and software that supports the identity integration method that align with your roadmap. Be flexible…using CAS is better than the app storing its own passwords. However, realize that this application will probably never support the two factor authentication services available in OAuth2 and SAML. There are many “good” legacy SSO protocols, don’t forget Siteminder in the Enterprise world… however, if you’re faced with the situation… try NOT TO CAS.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容