03 选看 OpenID Connect 简介.mp4

OpenID Connect 是身份认证协议(OAuth 2.0 不是)。

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

身份认证 vs 授权

  • 身份认证 Authentication
  • 授权 Authorization

引用《OAuth 2.0 in Action》里面的一个比喻来解释。把身份认证看作是软糖,而授权是巧克力。这两种东西感觉略有相似,但是本质上却截然不同:巧克力是一种原料,而软糖是一种糖果。可以使用巧克力作为主要原料做出巧克力口味的糖果,但是巧克力和软糖绝不是等价的。

尽管巧克力可以单独作为一种最终产品,但在这个比喻里巧克力是一种非常有用原料,它极具多样性,可以用来做蛋糕、冰激凌、雪糕、糖果等等。

要制作巧克力软糖,也就是需要一个基于 OAuth 2.0(巧克力)的身份认证协议(软糖)。而 OpenlD Connect 就是这样的开放标准,它可以工作于不同的身份供应商之间。OpenID Connect 基于 OAuth 2.0,在此之上,它添加了一些组件来提供身份认证的能力。

OpenlD Connect 的官方定义:OpenlD Connect 是建立在 OAuth2.0 协议上的一个简单的身份标识层,OpenID Connect 兼容 OAuth 2.0。
**

OAuth 2.0 与身份认证协议的角色映射

image.png

上半部分是 OAuth 2.0 的角色,下半部分是身份认证协议的角色。

Q:为什么不使用 OAuth 2.0 的 Acess Token 来解决身份认证的问题?
A:

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

OpenID Connect 关键点

  • ID Token
    • 包含身份认证信息
    • 和 Access Token 一同发回给客户端应用
  • Userlnfo 端点:包含用户信息
  • 提供一组标识身份的 scopes 和 claims:
    • profile
    • email
    • address
    • phone

流程图:

image.png

  • RP:Relying Party 依赖方/客户端应用
  • OP:OpenID Provider OpenID 提供商

OpenID Connect 三个流程(Flow)

  • Authorization Code Flow
  • Implicit Flow
  • Hybrid Flow

这几个流程的具体区别和使用,课程后期结合代码实例阐述。