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

|<