5

有没有办法允许来自多个来源的 JWT?

我有一个 REST API,我只允许通过 Bearer Tokens 身份验证访问,而且我真的只需要验证这些令牌,所以我真的不需要 OIDC 带来的所有附加功能。

假设我将 Keycloak 设置为身份提供者。我会相应地配置 quarkous-oidc。但现在我也想允许我在另一个服务中创建的 JWT,用于服务到服务的通信。这不是身份提供者,但我宁愿只使用 smallrye-jwt 创建一些“内部”令牌。

所以实际上我似乎更愿意使用quarkus-smallrye-jwt,但是我不能为多个租户配置它。

我认为整合 JWKS 中的密钥并将其提供给 quarkus-smallrye-jwt 最终会起作用。但也许有一个我没有看到的更优雅的解决方案。

4

1 回答 1

2

使用 microprofile-jwt(smallrye-jwt) 您可以选择使用JWKS(Json Web Key Set)作为您的mp.jwt.verify.publickey.location属性。这使您可以信任由多个发行人发行的代币。但是,您将无法验证issuerjwt 令牌字段中的多个值,因为它只支持单个值,或者为每个颁发者定义不同的配置。

您可以手动创建 JWKS,结合来自您的身份验证提供程序的密钥信息并将其嵌入/安装在您的应用程序中,或者您可以实现一些动态生成它的端点(例如,它会定期调用 2 个 Keycloaks JWKS url 并结合输出产生新的 JWKS)

如果您需要对验证进行更多控制,则需要创建自己的实现并将其与 MP JWT/Quarkus 集成。一种选择是为JWTCallerPrincipalFactorysmallrye-jwt 提供自定义 - 请参阅有关自定义工厂的文档。在那里您可以读取任何自定义配置(例如my.app.jwt.issuers=trustedIssuer1,trustedIssuer2并自己处理验证,也许重用 smallrye 已经提供的类(JWTAuthContextInfo... JWTParser

于 2021-08-26T09:55:04.310 回答