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 支持 | 否 | 是 |