SSO = Single Sign On

为什么要有SSO?

我们可以从有SSO和没有SSO比较开始:

  1. 如果没有SSO的话,那所有的APP都需要维护一套完整的认证+授权(authentication and authorization)
    App team 不开心,因为他们不得不维护所有用户信息,还要维护模块去做验证和授权
    User 不开心,因为用户得不得在每个App内管理一对儿用户名和密码,还总是需要登录
  2. 如果有SSO,那么用户只需要注册/认证+授权/一次
    APP team 开心了,他们不在需要维护用户信息,也完全不需要认证模块
    User 开心了,他们不需要到处登录,记住用户名密码,只需要登录一次就能访问需要的各个App

SSO 组成部分

  • User: 就是user,想要访问不同的app
  • Indentity Provider (IDP): IDP 不仅仅是告诉了SP user是谁, 同时还需要告诉SP user都有什么访问权限
  • Service Provider (SP): SP就是传统的那些APP
  • 更多情况下,IDP的话会与AD或者LDAP建立联系,因为user信息的话会存储在external system,这样的话就可以有很多的IDP但是user数据是几种存储的

SSO protocols

  • Basic auth: simple username + password SSO: Basic-Auth & OAuth2 & SAML & OpeanID
    Basic auth:

    • USER首先要访问SP
    • SP直接跟USER要credentials
    • USER提供credentialsSP
    • SP把credentials提供给给IDP,让IDP去认证
    • IDP返回这个user的基本信息,还有权限

    注意只有这种basic auth的SSO才涉及username/password的流动,其他的OAuth2和SAML都不再涉及去验证username和password了

  • OAuth 2: 感觉OAuth2更像是authorization而没有authenticatn
    SSO: Basic-Auth & OAuth2 & SAML & OpeanID
    OAuth2:

    • USER要访问SP
    • SP说我只认IDP提供的token/key
    • USER去找IDP要token去访问SP
    • IDP需要认证USER是否可以访问SP
    • USER提供credentials给IDP
    • IDP给USER办法token/keya
    • USER拿着token/key去找SP
    • SP通过API跟IDP认证,token/key是否vaild

    生活中更常见的是,当你想访问咸鱼的时候,咸鱼会把你转到淘宝的认证页面,在这个页面里,先让你登陆,登陆后让你授权咸鱼访问你的个人资料;如果你同意的话,这个页面就会给你一个token,同通过一开始咸鱼赚到淘宝认证页面时带上的redirect -url,再转到咸鱼的页面;这就完成了一次OAuth2认证授权

  • SAML: Security Assertaion Markup Language
    SSO: Basic-Auth & OAuth2 & SAML & OpeanID
    SAML:

    • USER要访问SP
    • SP也只认IDP的token/key
    • USER去找IDP要acces SP的token
    • IDP跟SP验证,IDP是否需要保护这个SP,同时SP将公钥发给IDP(IDP用公钥去加密数据)
    • IDP再去跟USER做验证,valid后,将通过公钥加密过的数据,交给USER
    • USER将数据交给SP,SP通过私钥解密
      SSO: Basic-Auth & OAuth2 & SAML & OpeanID
      更详细的SAML
    • user要访问SP
    • SP阻止用户的访问,因为用户没有cookie/session
    • 同时SP把request redirect到IDP
    • IDP请求User做登陆验证
    • User提供credntials之后,IDP调用AD/LDAP做查询认证
    • 之后会有两件事儿
      • IDP端会存储cookie
      • User等其他信息会返回SP
    • SP通过公钥私钥进行数据解密
    • SP建立session
    • User得到一开始的SP请求
    • User得到SP的cookie
  • OpenID: 在OAuth的基础上建立的

OAuth2 vs SMAL

  • SMAL 支持 web app,其他的比如mobile app就不支持

未完待续

相关文章:

  • 2018-07-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-03
  • 2021-06-27
猜你喜欢
  • 2022-12-23
  • 2022-03-06
  • 2021-01-02
  • 2022-01-01
  • 2022-01-14
  • 2021-07-02
相关资源
相似解决方案