OpenID Connect 1.0是建立在OAuth 2.0上的一个身份验证机制,它允许客户端通过授权服务对用户进行认证并获取简单的用户信息。
前置知识:读者需要了解OAuth2.0的授权码模式和隐藏模式两种工作流程,要了解JWT、JWE、JWS等概念。这在我的前两篇文章都有详细讲解
概览
名词解释
OP:OpenID Provider,即OAuth2.0中的授权服务,用于对用户鉴权
RP:Relying Part,依赖方,即OAuth2.0中的客户端,它从OP除获取对用户的鉴权和用户信息
ID Token:是一个JWT,包含本次授权的基本信息。具体包含字段如下
字段
必须?
说明
iss
是
发布者,一个https开头的地址
sub
是
主体,OP对用户的唯一标识,不超过255个ASCII字符
aud
是
客户,即使用者。值为OAuth2.0协议中客户端注册的client_id
exp
是
过期时间,遵从RFC 3339协议,即epoch seconds
iat
是
签发时间,同上
auth_time
可选
鉴权时间
nonce
随机值。两个作用一是RP发送时带上,OP响应时带上,用于RP对比二是防重放攻击
acr
可选
Authentication Context Class Reference,暂不知义,忽略
amr
可选
Authentication Methods References,暂不知义,忽略
azp
可选
Authorized party,暂不知义,忽略
总体流程
类似OAuth2.0,有一个总体流程和若干细分模式的流程,OpenID Connect协议总体流程为:RP发起请求 -> OP对用户鉴权并获取授权 -> OP响应RP并带上ID Token和Access Token -> RP通过访问凭证向OP请求用户信息 -> OP返回用户信息给RP
+--------+ +--------+
| | | |
| |---------(1) AuthN Request-------->| |
| | | |
| | +--------+ | |
| | | | | |
| | | End- |<--(2) AuthN & AuthZ-->| |
| | | User | | |
| RP | | | | OP |
| | +--------+ | |
| | | |
| |<--------(3) AuthN Response--------| |
|<