OpenID Connect 1.0是建立在OAuth 2.0上的一个身份验证机制,它允许客户端通过授权服务对用户进行认证并获取简单的用户信息。
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
客户鉴权即OP对客户端进行鉴权,然后将鉴权结果返回给RP。鉴权流程有三种方式:授权码模式、隐藏模式、混合模式。如果了解OAuth2.0,对前两个模式一定不会模式,OpenID流程类似,而混合模式则是前两种模式的结合。具体OP采用什么模式,取决于RP请求时response_type
给的值。
id_token和token等同:只有id_token或/和token的使用隐藏模式,只有code的使用授权码模式i,同时存在他们的则使用混合模式