Quarkus:集成测试 - 如何模拟 OIDC?

Posted

技术标签:

【中文标题】Quarkus:集成测试 - 如何模拟 OIDC?【英文标题】:Quarkus: Integration tests - how to mock OIDC? 【发布时间】:2021-07-05 13:07:50 【问题描述】:

我正在尝试使用 Quarkus 运行一些集成测试,并使用 Bearer Token Authorization 保护我们的 JAX-RS 应用程序。

根据我们在Quarkus Guide 上看到的内容,理论上可以模拟授权机制的行为,而无需在本地运行授权服务器(如 Keycloak)。

我发现的问题是我在所描述的任何依赖项中都找不到OidcWiremockTestResource.class。它在哪里?

另外,我们如何避免运行授权服务器来针对我们的端点运行一些测试?

我发现可以模拟 JsonWebTokenSecurityIdentity 只需使用:

    @InjectMock
    SecurityIdentity identity;

    @InjectMock
    JsonWebToken token;

它工作得很好,但是当我尝试运行集成测试时,授权服务器仍然需要启动并运行。否则 Quarkus 无法尝试连接。

我尝试禁用 OIDC 扩展 (quarkus.oidc.enabled=false),但随后代码当然无法编译(端点无法识别依赖项)。

那么,在运行一些集成测试时,哪一种是跳过 OIDC 连接的最佳方法?

最好的,

【问题讨论】:

【参考方案1】:

OidcWiremocTestResource1.13.1.Final 中可用。

此外,TestSecurity 注释将可以在这种情况下使用,从 Quarkus 2.0 开始,也可能从 1.13.2.Final 开始(如果此 PR 将被向后移植): https://github.com/quarkusio/quarkus/pull/16362

最后,Quarkus 2.0 将有一个 Keycloak 测试支持模块 - 如果您使用 Keycloak,那么它将有助于针对实时 Keycloak 实例进行测试。

【讨论】:

谢谢谢尔盖!在我们更新到最后一个版本后它就可以工作了 :-) 现在我们不需要仅仅为了 REST 测试而拥有授权服务器

以上是关于Quarkus:集成测试 - 如何模拟 OIDC?的主要内容,如果未能解决你的问题,请参考以下文章

具有资源前提条件的 Quarkus 资源测试

如何在 Kubernetes 上的 Quarkus 中设置与 Keycloak 的 OIDC 连接

如何诊断 Quarkus REST 服务 OIDC 错误(特别是 403 禁止)?

为啥 quarkus.oidc.credentials.secret 被忽略?

允许 quarkus-oidc 自定义 403 的响应正文

是否有具有多个命名 Oidc 客户端的示例 quarkus 项目来调用多个服务调用?