需要学习的 OIDC

973 阅读2分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战

OIDC

OIDC(简称 OpenID Connect)。OIDC 是在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。OAuth2.0是一个授权协议,无法提供身份认证功能。但 OIDC增加了这部分的功能。OIDC是基于 OAuth2.0 构建的,所以它们是相互兼容的,如果搭建了一个OIDC的服务后,也可以当作一个OAuth2的服务来用。

所以,OIDC=(Identity, Authentication) + OAuth 2.0

OIDC 流程

oidc.png

步骤:

  1. 客户端 RP 发送一个认证请求(其中携带认证类型)给OP (OpenId Provider)。OIDC 提供的认证类型主要有三种:authorization code,implict,hybrid。
  2. OP对用户进行身份认证,然后提供授权;
  3. OP把 ID Token 和 Access Token(需要的话)返回给客户端;
  4. 客户端使用 Access Token 发送一个请求获取用户信息;

相比较于OAuth2.0,OIDC有什么其他的

新内容和特点?

ID Token

D Token是一个安全令牌,是一个授权服务器提供的包含用户信息(由一组Cliams构成以及其他辅助的Cliams) 的JWT格式的数据结构。 OIDC 对 OAuth2.0 扩展就是增加 ID Token 。

ID Token的主要构成部分如下:

  • iss Issuer Identifier 认证信息的唯一标识
  • sub Subject Identifier iss 提供的客户端的标识,在iss 范围内唯一
  • aud Audiences 标识 ID Token 的受众,必须包含Oauth2.0 的 client_Id
  • exp Expiration time 过期时间,超时的话 ID Token 将作废
  • iat Issued at time
  • auth_time Authentication Time 客户端完成认证的时间
  • nonce 随机字符串,用来减缓重放攻击

认证类型

在步骤 1 时,谈到客户端发起认证请求的时候也会提供认证类型的。不同的认证类型请求参数是不一样的:

  • Authorization Code Flow:通过授权码 Code 来换取Id Token和Access Token。
  • Implicit Flow:使用Implicit流程获取Id Token和Access Token。
  • Hybrid Flow:混合使用 Authorization Code Flow 和 Implici Flow两种联合

所以,使用 Authorization Code Flow 的方式其实就是和 OAuth2.0 是类似的流程,通过用户授权获取到授权码 Code ,再使用 Code 换取 AccessToken ,OIDC协议中增加了一个 ID Token ,客户端需要使用 accessToken 和 ID Token 进行验证。这样用户的身份认证就完成了,然后就可以获取 用户信息。

理论知识学习了,并且根据流程图进行了分析但是还是需要实践一下,详细请见下一章内容,利用OIDC协议书实现单点登录的 Demo。

OAuth2.0学习记录

CAS学习记录

\