openid-connect

注意:schema 中还定义了 ,这意味着该字段将会被加密存储在 etcd 中。具体参考 。

tip

教程:使用 Keycloak 与 API 网关保护你的 API

该插件提供两种使用场景:

  1. 应用之间认证授权:将 bearer_only 设置为 true,并配置 introspection_endpointpublic_key 属性。该场景下,请求头(Header)中没有令牌或无效令牌的请求将被拒绝。

令牌内省是通过针对 OAuth 2.0 授权的服务器来验证令牌及相关请求,详情请阅读 Token Introspection

token introspection

以下示例是在路由上启用插件。该路由将通过内省请求头中提供的令牌来保护上游:

以下命令可用于访问新路由:

在此示例中,插件强制在请求头中设置访问令牌和 Userinfo 对象。

当 OAuth 2.0 授权服务器返回结果里除了令牌之外还有过期时间,其中令牌将在 APISIX 中缓存直至过期。更多信息请参考:

  1. 的文档和源代码。
  2. exp 字段的定义:Introspection Response

公钥内省

除了令牌内省外,还可以使用 JWT 令牌的公钥进行验证。如果使用了公共密钥和令牌内省端点,就会执行公共密钥工作流,而不是通过身份服务器进行验证。该方式适可用于减少额外的网络调用并加快认证过程。

通过 OIDC 依赖方认证流程进行身份验证

当一个请求在请求头或会话 Cookie 中不包含访问令牌时,该插件可以充当 OIDC 依赖方并重定向到身份提供者的授权端点以通过 。

一旦用户通过身份提供者进行身份验证,插件将代表用户从身份提供者获取和管理访问令牌和更多信息。该信息当前存储在会话 Cookie 中,该插件将会识别 Cookie 并使用其中的信息,以避免再次执行认证流程。

以下示例是将此操作模式添加到 Route:

在以上示例中,该插件可以强制在配置的请求头中设置访问令牌、ID 令牌和 UserInfo 对象。

  1. 如果 APISIX 无法解析或者连接到身份认证服务(如 Okta、Keycloak、Authing 等),请检查或修改配置文件(./conf/config.yaml)中的 DNS 设置。

  2. 如果遇到 the error request to the redirect_uri path, but there's no session state found 的错误,请检查 参数配置:APISIX 会向身份认证服务发起身份认证请求,认证服务完成认证、授权后,会携带 ID Token 和 AccessToken 重定向到 redirect_uri 所配置的地址(例如 http://127.0.0.1:9080/callback),接着再次进入 APISIX 并在 OIDC 逻辑中完成 Token 交换的功能。因此 redirect_uri 需要满足以下条件:

  • redirect_urischeme:host)的 和 host 是身份认证服务视角下访问 APISIX 所需的值。