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与身份认证协议的角色映射
为什么不使用OAuth 2.0里的Access Token来解决这个问题呢?
- Access Token不含有身份认证的信息
- 生命周期可能很长,用户离开了,它仍然有效·Access Token可能被其它客户端借用
- Access Token不是为客户端准备的,它对客户端不透明,但是客户端可以从AccessToken里得到一些用户信息。Access Token的真正自标观众是被保护资源
OpenId Connect
- ID Token
- UserInfo 端点可以获取用户信息
- 提供一组标识身份的scopes和claims:
- profile
- address
- phone
OpenID Connect三个流程(Flow)
- Authorization Code Flow
- Implicit Flow
- Hybrid Flow(混合)