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--------| |
|<