IT Panda Blog

Life is fantastic


  • Home

  • Tags

  • Categories

  • Archives

SSO: Basic-Auth & OAuth2 & SAML & OpeanID

Posted on 2019-09-21 In sso

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

    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

    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

    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通过私钥解密

      更详细的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就不支持

未完待续

sso oauth saml openid
Docker <none>:<none> - dangling
Http vs. Socket
  • Table of Contents
  • Overview
Rex

Rex

25 posts
26 categories
49 tags
Links
  • GitHub
  1. 1. 为什么要有SSO?
  2. 2. SSO 组成部分
  3. 3. SSO protocols
    1. 3.1. OAuth2 vs SMAL
© 2019 – 2020 作者拥有版权,转载请注明出处