「这是我参与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 流程
步骤:
- 客户端 RP 发送一个认证请求(其中携带认证类型)给OP (OpenId Provider)。OIDC 提供的认证类型主要有三种:authorization code,implict,hybrid。
- OP对用户进行身份认证,然后提供授权;
- OP把 ID Token 和 Access Token(需要的话)返回给客户端;
- 客户端使用 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。
\