我应该在哪里存储我的Java应用程序的凭据以访问第三方服务?

我应该在哪里存储我的Java应用程序的凭据以访问第三方服务?

凭据不是我的应用程序上的每个用户特定的。 它们用于访问我的应用程序正在使用的Web服务。 我知道不要将它们硬编码到我的应用程序中,但我在哪里以及如何存储它们? 我还假设它们需要加密。

.jar文件是存储所有凭据的最佳方式。

  1. 创建接口,将您的凭据存储为最终字符串
  2. 将接口转换为jar文件
  3. 在构建路径中添加该jar文件
  4. 实现此接口,您使用凭据,并访问存储凭据的String对象。
  • D b
  • .properties文件
  • 具有常量的配置类

Spring具有很好的@Value注释function,可以使用给定的键自动从.properties文件(在资源文件夹下)注入值。

我使用它,因为在我的情况下,我在多个应用程序实例中有不同的键值,而db需要更多的复杂性,而且我不会对db进行不必要的查询。

在安全的基础上,如果攻击者可以读取服务器上的文件,那么他可以轻松读取您的数据库,这样就不会在这里发挥作用。 它可以存储在系统上的任何文件中。

另一方面,您可以使用配置类

public static final String SECRET_KEY =“someKey”

建立@Zildyan的答案,评论和对其他答案的引用。

存储位置有几个选项:

  • 数据库
  • 属性文件
  • 常数(硬编码)
  • 文件系统(远离应用程序)

至于如何存储:

取决于灵敏度。 凭证可以以纯文本(低灵敏度)存储,也可以加密(高灵敏度)。


还应注意,使用加密和从源分离凭据的组合,您将限制对凭据的内部访问。

一些例子

  • 以纯文本格式存储的密码可以添加到源代码控制中,并由有权访问源代码管理的任何人读取。
  • 任何能够运行代码的人都可以轻松获得带有解密代码的加密密码。
  • 存储在服务器上的纯文本文件可供访问服务器的任何人访问。
  • 存储在文件系统上的加密文件只能由sys admins和devs可用的解密方法访问。

存储在数据库中以及谁有权访问该数据库也是如此。

JNDI

每个维基百科 :

Java命名和目录接口(JNDI)是一种用于目录服务的Java API,它允许Java软件客户端通过名称发现和查找数据和资源(以Java对象的forms)。

您的企业可能已建立与JNDI兼容的目录服务。 您可以要求系统管理员为您的特定凭据包含一个条目。

如果您是自我管理的,那么您的Java EE(现在的Jakarta EE)应该内置一个与JNDI兼容的服务器。 学习配置它,并为您的特定凭据添加条目。