openid-connect
注意:schema 中还定义了 ,这意味着该字段将会被加密存储在 etcd 中。具体参考 。
tip
教程:使用 Keycloak 与 API 网关保护你的 API
该插件提供两种使用场景:
应用之间认证授权:将
bearer_only
设置为true
,并配置introspection_endpoint
或public_key
属性。该场景下,请求头(Header)中没有令牌或无效令牌的请求将被拒绝。
令牌内省是通过针对 OAuth 2.0 授权的服务器来验证令牌及相关请求,详情请阅读 Token Introspection。
以下示例是在路由上启用插件。该路由将通过内省请求头中提供的令牌来保护上游:
以下命令可用于访问新路由:
在此示例中,插件强制在请求头中设置访问令牌和 Userinfo 对象。
当 OAuth 2.0 授权服务器返回结果里除了令牌之外还有过期时间,其中令牌将在 APISIX 中缓存直至过期。更多信息请参考:
- 的文档和源代码。
exp
字段的定义:Introspection Response。
公钥内省
除了令牌内省外,还可以使用 JWT 令牌的公钥进行验证。如果使用了公共密钥和令牌内省端点,就会执行公共密钥工作流,而不是通过身份服务器进行验证。该方式适可用于减少额外的网络调用并加快认证过程。
通过 OIDC 依赖方认证流程进行身份验证
当一个请求在请求头或会话 Cookie 中不包含访问令牌时,该插件可以充当 OIDC 依赖方并重定向到身份提供者的授权端点以通过 。
一旦用户通过身份提供者进行身份验证,插件将代表用户从身份提供者获取和管理访问令牌和更多信息。该信息当前存储在会话 Cookie 中,该插件将会识别 Cookie 并使用其中的信息,以避免再次执行认证流程。
以下示例是将此操作模式添加到 Route:
在以上示例中,该插件可以强制在配置的请求头中设置访问令牌、ID 令牌和 UserInfo 对象。
如果 APISIX 无法解析或者连接到身份认证服务(如 Okta、Keycloak、Authing 等),请检查或修改配置文件(
./conf/config.yaml
)中的 DNS 设置。如果遇到
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_uri
(scheme:host
)的 和host
是身份认证服务视角下访问 APISIX 所需的值。