2.4. 在 OpenID Connect 和 SmallRye JWT 身份验证机制之间进行选择
使用以下信息来选择适当的令牌身份验证机制来保护 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 令牌提供有关用户的更多信息。所有扩展都可以将令牌注入为Principal。 -
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 不透明令牌验证 | 内省 | 否 |
|
刷新 | 是 | 是 |
|
将令牌表示为 | 是 | 是 |
| 将 JWT 注入 MP JWT | 是 | 是 |
| 授权代码流 | 是 | 否 |
| 多租户 | 是 | 否 |
| 用户信息支持 | 是 | 否 |
| PEM 密钥格式支持 | 否 | 是 |
| secretKey 支持 | 否 | JSON Web 密钥(JWK)格式 |
| 内部签名和加密或加密令牌 | 内省 | 本地验证 |
| 自定义令牌验证 | 否 | 使用注入的 JWT 解析器 |
| JWT 作为 Cookie 支持 | 否 | 是 |