OIDC(OPENID CONNECT)身份认证授权

只有一张图!

OIDC = (identity,authentication) + OAuth2.0,在OAuth2.0 上构建了一个身份层,是一个基于OAuth2.0协议的身份认证标准协议。
OIDC应用场景

再来一张图吧! 基于OAuth的认证与身份协议的各个组件

名词解释

RP: 在新的协议语境中,客户端叫依赖方,或者叫 RP

IdP: 从概念上将手段服务器和受保护资源合并为身份提供方

ID令牌: 用于携带有关身份认证事件本身的信息。解决不同身份提供者的协议各不相同的问题。

身份认证

  • 资源拥有者要在授权服务器上授权端点上进行身份认证 为什么有?想想。“忽略了一个环节:对资源拥有者进行身份认证”。
  • 客户端要在授权服务器的令牌端点进行身份认证
  • 最后,基于OAuth实现的身份认证 - OpenID Connect

发现协议

openid-connect discovery 动态服务器发现, 客户端需要知道 IdP的发布者URL。

  • 可以直接配置,比如NASAR
  • 也可以基于WebFinger协议来发现发布者。

客户端注册协议

可以昂客户端向新的身份提供者注册。与OAuth动态客户端注册协议扩展并行,两者是相互兼容的, 参考OAuth动态客户端注册扩展。

  • 如果客户端需要访问的API是由多个不同的服务器提供的。
  • 如果客户端软件有多个实例,每个实例都需要与同一个授权服务器交互。

不同的OpenID Connect客户端

Authorization Code Flow

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 不支持。

参考

  1. OIDC 身份认证授权
    http://www.csharpkit.com/2017-09-23_58568.html

  2. OpenID Connect Core 1.0 incorporating errata set 1
    https://openid.net/specs/openid-connect-core-1_0.html

  3. User Authentication with OAuth 2.0 https://oauth.net/articles/authentication/

  4. OAuth 2.0 实战 在web.kamiapp.com里

  5. OpenID Connect Plugin https://docs.konghq.com/hub/kong-inc/openid-connect/


·End·
最后修改 August 21, 2021 : add Kong OpenID Connect Plugin (44fc6ed)