0

我们的团队正在使用 IntelliJ 开发 Java Spring Boot 服务。在运行时,这些服务需要连接到各种 REST API、数据库和消息代理。虽然大多数逻辑都可以通过使用模拟而不是真实服务访问的单元测试来测试,但我们还使用 JUnit 编写了许多集成测试来测试“真实的东西”(其他人可能称之为合同测试)。这些集成测试在专用测试环境中连接到这些 API 和服务的实例。此时,集成测试只能由开发人员手动运行,而不是由我们的自动化 CI/CD 管道运行。在大多数情况下,这工作得很好。

我想解决的问题如下......

要访问这些 API 和服务,必须提供有效的 Active Directory 凭据。Security 通常禁止共享凭据,因此所有开发人员都已获得所需 AD 组的成员资格,并且需要使用他们的个人凭据来执行集成测试。单元/集成测试被配置为从配置属性中读取凭据。当前的做法是每个开发人员在application-junit.yaml文件中设置他们的 AD 用户名和密码。这当然是非常糟糕的安全实践,因为可能每月至少有一次有人不小心将他们的凭据提交给版本控制,或者可能在屏幕共享会话期间不小心显示该文件及其凭据。

我已经研究了 Spring Boot 关于外部化配置的指南,并设法通过环境变量或通过 IntelliJ 的Run/Debug Configurations中设置的 VM 参数来提供我的凭据。这解决了不小心将凭据提交给版本控制的第一个问题,但仍然保留了(尽管减少了)意外屏幕共享的风险。将明文 AD 密码放入 env var 或配置文件中仍然是一种糟糕的安全做法。

我读到了 IntelliJ 对 Keepass(在 Windows 上)或本机钥匙串(macOS)的支持。据说这种机制用于存储访问 Git、数据库等的密码,但找不到有关是否以及如何使用此功能安全地为 JUnit 测试运行提供凭据的任何进一步信息。在 Google、IntelliJ 的论坛和 SO 上的密集搜索也没有产生任何有用的结果。

有任何想法吗?

4

0 回答 0