2.4. 在 OpenID Connect、SmallRye JWT 和 OAuth2 身份验证机制之间进行选择
使用以下信息来选择适当的令牌身份验证机制来保护 Quarkus 应用程序。
身份验证机制用例列表
-
Quarkus-oidc需要 OpenID Connect 供应商,如 Keycloak,它可以验证 bearer 令牌或使用授权代码流验证最终用户。在这两种情况下,quarkus-oidc需要连接到指定的 OpenID Connect 供应商。 -
如果用户身份验证需要授权代码流,或者您需要支持多个租户,请使用
quarkus-oidc。Quarkus-oidc也可以使用授权代码流和 Bearer 访问令牌来请求用户信息。 -
如果需要验证 bearer 令牌,请使用
quarkus-oidc或quarkus-smallrye-jwt。 -
如果您的 bearer 令牌采用 JSON Web 令牌(JWT)格式,您可以使用前面的列表中的任何扩展。
quarkus-oidc和quarkus-smallrye-jwt支持在 OpenID Connect 提供程序轮转密钥时刷新JsonWebKey(JWK)设置。因此,如果必须避免远程令牌内省,或者供应商不支持,请使用quarkus-oidc或quarkus-smallrye-jwt来验证 JWT 令牌。 -
要远程内省 JWT 令牌,您可以使用
quarkus-oidc通过远程内省验证不透明或二进制令牌。quarkus-smallrye-jwt不支持对不透明或 JWT 令牌的远程内省,而是依赖于通常从 OpenID Connect 供应商检索的本地可用密钥。 -
Quarkus-oidc和quarkus-smallrye-jwt支持 JWT 和不透明令牌注入端点代码中。注入的 JWT 令牌提供有关用户的更多信息。所有扩展都可以将令牌作为主体注入。 -
quarkus-smallrye-jwt支持比quarkus-oidc更多的键格式。Quarkus-oidc只使用属于 JWK 集的 JWK 格式的密钥,而quarkus-smallrye-jwt支持 PEM 密钥。 -
Quarkus-smallrye-jwt处理本地签名、内部签名和加密令牌。相反,虽然quarkus-oidc也可以验证这些令牌,但它将其视为不透明令牌,并通过远程内省进行验证。
架构考虑因素导致您的决定使用不透明或 JSON Web 令牌(JWT)令牌格式。不透明令牌通常比 JWT 令牌更短,但需要大多数令牌关联状态才能在提供程序数据库中维护。不透明令牌是有效的数据库指针。
JWT 令牌比不透明令牌要长。然而,提供商通过将其存储为令牌声明并签名或加密,从而有效地将大多数令牌关联状态委派给客户端。
| 所需功能 | 身份验证机制 | |
|---|---|---|
|
|
| |
| bearer JWT 验证 | 本地验证或内省 | 本地验证 |
| bearer opaque 令牌验证 | 内省 | 否 |
|
刷新 | 是 | 是 |
|
将令牌表示为 | 是 | 是 |
| 将 JWT 注入为 MP JWT | 是 | 是 |
| 授权代码流 | 是 | 否 |
| 多租户 | 是 | 否 |
| 用户信息支持 | 是 | 否 |
| PEM 密钥格式支持 | 否 | 是 |
| secretKey 支持 | 否 | JSON Web 密钥(JWK)格式 |
| 内部签名和加密令牌 | 内省 | 本地验证 |
| 自定义令牌验证 | 否 | 带有注入的 JWT 解析器 |
| JWT 作为 Cookie 支持 | 否 | 是 |