OIDC(OPENID CONNECT)身份认证授权
只有一张图!
OIDC = (identity,authentication) + OAuth2.0,在OAuth2.0 上构建了一个身份层,是一个基于OAuth2.0协议的身份认证标准协议。
再来一张图吧!
名词解释
RP: 在新的协议语境中,客户端叫依赖方,或者叫 RP
IdP: 从概念上将手段服务器和受保护资源合并为身份提供方
ID令牌: 用于携带有关身份认证事件本身的信息。解决不同身份提供者的协议各不相同的问题。
身份认证
- 资源拥有者要在授权服务器上授权端点上进行身份认证 为什么有?想想。“忽略了一个环节:对资源拥有者进行身份认证”。
- 客户端要在授权服务器的令牌端点进行身份认证
- 最后,基于OAuth实现的身份认证 - OpenID Connect
发现协议
openid-connect discovery 动态服务器发现, 客户端需要知道 IdP的发布者URL。
- 可以直接配置,比如NASAR
- 也可以基于WebFinger协议来发现发布者。
客户端注册协议
可以昂客户端向新的身份提供者注册。与OAuth动态客户端注册协议扩展并行,两者是相互兼容的, 参考OAuth动态客户端注册扩展。
- 如果客户端需要访问的API是由多个不同的服务器提供的。
- 如果客户端软件有多个实例,每个实例都需要与同一个授权服务器交互。
不同的OpenID Connect客户端
Authorization Code Flow
Implicit Flow
在Successful Authentication Response
里返回id_token和token, 而不是code
Hybrid Flow
区别在与reponse_type 可以为 code id_token
, code token
or code id_token token
不同的返回适用于什么样的场景了?
其他
Access Token
JSON Web Token(JWT) Profile for OAuth2.0 Access Tokens
定义了Token的Data Structure,以及发布和消费Access Token具体的内容
实践
Kong OpenID Connect 支持多种授权流程.罗列下常见的流程
- Session Authentication
- JWT Access Token Authentication
- User Info Authentication
- Introspection Authentication
- Authorization Code Flow
更多内容,见参考
Apache Apisix 支持的认证非常少,比如 Authorization Code Flow 不支持。
参考
-
OIDC 身份认证授权
http://www.csharpkit.com/2017-09-23_58568.html -
OpenID Connect Core 1.0 incorporating errata set 1
https://openid.net/specs/openid-connect-core-1_0.html -
User Authentication with OAuth 2.0 https://oauth.net/articles/authentication/
-
OAuth 2.0 实战 在web.kamiapp.com里
-
OpenID Connect Plugin https://docs.konghq.com/hub/kong-inc/openid-connect/