第 12 章 OpenID Connect 集成
3scale 与第三方身份提供程序(IdP)集成,用于使用 OpenID Connect 规格验证 API 请求,包括以下功能:
- OpenID Connect 基于 OAuth 2.0 基础上构建,通过身份验证机制补充 OAuth 2.0 授权框架。
- 使用 OpenID Connect 身份验证 选项时,API 请求使用 JSON Web Token(JWT)格式(RFC 7519)格式的访问令牌进行身份验证。
集成由以下两个部分组成:
红帽 3scale API 管理完全支持两个集成点作为 OpenID 提供程序的红帽单点登录(RH-SSO)。请参阅 支持的 Configurations 页面中的 RH-SSO 版本。APIcast 集成也通过 ForgeRock 进行测试。
在这两种情况下,您可以使用 OpenID Connect 身份验证选项在服务的 Integration 页面上指定 OpenID Connect Issuer 字段来配置集成。具体步骤请参阅 配置 Red Hat Single Sign-On 集成。
12.1. APIcast 验证和解析 JWT
使用 OpenID Connect 身份验证模式对服务的 API 请求应当通过 Bearer
模式在 Authorization
标头中以 JWT 格式提供访问令牌。标头应类似以下示例:
Authorization: Bearer <JWK>
例如:
Authorization: Bearer: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lkcC5leGFtcGxlLmNvbSIsInN1YiI6ImFiYzEyMyIsIm5iZiI6MTUzNzg5MjQ5NCwiZXhwIjoxNTM3ODk2MDk0LCJpYXQiOjE1Mzc4OTI0OTQsImp0aSI6ImlkMTIzNDU2IiwidHlwIjoiQmVhcmVyIn0.LM2PSmQ0k8mR7eDS_Z8iRdGta-Ea-pJRrf4C6bAiKz-Nzhxpm7fF7oV3BOipFmimwkQ_-mw3kN--oOc3vU1RE4FTCQGbzO1SAWHOZqG5ZUx5ugaASY-hUHIohy6PC7dQl0e2NlAeqqg4MuZtEwrpESJW-VnGdljrAS0HsXzd6nENM0Z_ofo4ZdTKvIKsk2KrdyVBOcjgVjYongtppR0cw30FwnpqfeCkuATeINN5OKHXOibRA24pQyIF1s81nnmxLnjnVbu24SFE34aMGRXYzs4icMI8sK65eKxbvwV3PIG3mM0C4ilZPO26doP0YrLfVwFcqEirmENUAcHXz7NuvA
JWT 令牌包含一个签名,令牌的接收方可以验证和确保令牌由已知签发者签名,并且其内容尚未更改。3scale 支持基于公钥/私钥对的 RSA 签名。此处,签发者使用私钥签署 JWT 令牌。APIcast 会使用公钥验证此令牌。
APIcast 使用 OpenID Connect Discovery 获取可用于验证 JWT 签名的 JSON Web 密钥(JWK)。
每个请求上,APIcast 执行以下操作:使用公钥验证 JWT 令牌。验证声明 nbf
和 exp
。验证声明中指定的签发者 是否为
(Issuer)是否与 OpenID Connect Issuer 字段中配置的相同。提取 azp
或 aud
声明的值,并将其用作客户端 ID,以标识 3scale 中的应用程序,以通过 Service Management API 授权调用。
如果任何 JWT 验证或授权检查失败,APIcast 会返回"Authenication failed" 错误。否则,APIcast 将请求代理到 API 后端。Authorization
标头保留在请求中,因此 API 后端也可以使用 JWT 令牌来检查用户和客户端身份。