OpenId Connect

  • OAuth 2.0不是身份认证协议
  • 什么是身份认证协议?
    • 它可以告诉应用程序当前的用户是谁,还有这些用户是否正在使用你的应用程序,它是一种安全架构,它可以告诉你用户是他们所声明的身份,通常,是通过提供一套安全凭据(例如用户名和密码)给应用程序来证明这一点。

身份认证 vs 授权

  • 身份认证Authentication
  • 授权Authorization
  • 引用《OAuth 2.0 in Action 》里面的一个比喻来解释,把身份认证看作是软糖,而授权是巧克力。这两种东西感觉略有相似,但是本质上却截然不同:巧克力是一种原料,而软糖是一种糖果。可以使用巧克力作为主要原料做出巧克力口味的糖果,但是巧克力和软糖绝不是等价的。
  • 尽管巧克力可以单独作为一种最终产品,但在这个比喻里巧克力是一种非常有用的原料,它极具多样性,可以用来做蛋糕,冰激凌,雪糕等等。
  • 要制作巧克力软糖,也就是需要一个基于OAth2的身份认证协议,而OpenId Connect就是这样的开放标准,它可以工作于不同的身份供应商之间。OpenId Connect基于OAuth 2.0,在此之上,它添加了一些组件来提供身份认证的能力。
  • OpenlD Connect的官方定义是: OpenlD Connect是建立在OAuth2.o协议上的一个简单的身份标识层, OpenID Connect兼容OAuth 2.0。

OAth2.0与身份认证协议的角色映射

image.png

为什么不使用OAuth 2.0里的Access Token来解决这个问题呢?

  • Access Token不含有身份认证的信息
  • 生命周期可能很长,用户离开了,它仍然有效·Access Token可能被其它客户端借用
  • Access Token不是为客户端准备的,它对客户端不透明,但是客户端可以从AccessToken里得到一些用户信息。Access Token的真正自标观众是被保护资源

OpenId Connect

  • ID Token
  • UserInfo 端点可以获取用户信息
  • 提供一组标识身份的scopes和claims:
    • profile
    • email
    • address
    • phone

image.png

OpenID Connect三个流程(Flow)

  • Authorization Code Flow
  • Implicit Flow
  • Hybrid Flow(混合)