OpenID Connect 协议
OpenID Connect简介
OpenID Connect
是由OpenID基金会于2014年发布的一个开放标准,简称OIDC, 它使用OAuth2.0来进行身份认证,OpenID Connect
是OpenID的第三代技术。 OpenID Connect
直接构建于OAuth2.0的基础之上,添加了一些组件来提供身份认证的能力与其兼容。 通常OpenID Connect
是和OAuth2一同部署来使用的。
OpenID Connect是更高级的协议, 它扩展并替代了OAuth2.0 尽管现在我们经常说我们在使用OAuth2.0来保护API, 其实更准确的说, 大多数情况下, 我们使用的是OpenID Connect.
身份认证(Authentication)
授权(Authorization)
名词定义
EU:End User,用户。
RP:Relying Party ,用来代指OAuth2中的受信任的客户端,身份认证和授权信息的消费方;
OP:OpenID Provider,有能力提供EU身份认证的服务方(比如OAuth2中的授权服务),用来为RP提供EU的身份认证信息;
ID-Token:JWT格式的数据,包含EU身份认证的信息。
UserInfo Endpoint:用户信息接口(受OAuth2保护),当RP使用ID-Token访问时,返回授权用户的信息,此接口必须使用HTTPS。
OIDC基础
OpenID是 Authentication
,即认证,对用户的身份进行认证,判断其身份是否有效,也就是让网站知道“你是你所声称的那个用户”;
OAuth是 Authorization
,即授权,在已知用户身份合法的情况下,经用户授权来允许某些操作,也就是让网站知道“你能被允许做那些事情”。
由此可知,授权要在认证之后进行,只有确定用户身份才能授权。
(身份验证)+ OAuth 2.0 = OpenID Connect
OpenID Connect
是“认证”和“授权”的结合,因为其基于OAuth协议,所以OpenID Connect
协议中也包含了client_id
、client_secret
还有redirect_uri
等字段标识。这些信息被保存在身份认证服务器
,以确保特定的客户端收到的信息只来自于合法的应用平台。这样做是目的是为了防止client_id
泄露而造成的恶意网站发起的OIDC流程。
在OAuth中的scope
,OpenID Connect
也有自己特殊的scope--openid
,它必须在第一次请求“身份鉴别服务器”(Identity Provider,简称IDP)时发送过去。
OIDC流程
OIDC基于OAuth2,所以OIDC的认证流程主要是由OAuth2的几种授权流程延伸而来的,有以下3种:
- Authorization Code Flow:使用OAuth2的授权码来换取
Id_Token
和Access_Token
。 - Implicit Flow:使用OAuth2的Implicit流程获取
Id_Toke
n和Access_Token
。 - Hybrid Flow:混合
Authorization Code Flow
+Implici Flow
。
OpenID Connect抽象流程:
1 | 1. 依赖发(RP)发送请求到OpenID提供商(OP, 也就是身份提供商). |
OpenID Connect身份认证有三个路径(三个流程, flow): Authorization Code
, Implicit
,Hybrid
。
Authorization Code(授权码)
要求客户端应用可以安全的在它和授权服务器之间维护客户端的secret
,也就是说只适合这样的客户端应用。它还适合于长时间的访问(通过refresh token)。
1 | 1,客户端准备身份认证请求, 请求里包含所需的参数 |
Implicit(简化)
不适合于长时间访问。
1 | 1,客户端准备身份认证请求, 请求里包含所需的参数 |
Hybrid Flow(混合)
适合于长时间的访问。
要求客户端应用可以安全的维护secret
。
1 | 1,客户端准备身份认证请求, 请求里包含所需的参数 |
参考:
Identity Server 4 预备知识 – OpenID Connect 简介