Java 通过SOAP服务向JIRA进行身份验证时存储安全密码

Java 通过SOAP服务向JIRA进行身份验证时存储安全密码,java,security,soap,passwords,jira,Java,Security,Soap,Passwords,Jira,我正在用Java编写一个应用程序,它需要在调用远程SOAP服务(JIRA)上的方法之前登录到该服务 我已经看了一些例子,例如如何做到这一点,但是我担心我需要在某些时候把密码放在内存中 我已经读到应该将密码存储为char[],但我仍然担心将密码存储在clear中 我应该如何存储客户端登录SOAP服务时使用的密码?我应该怎样读它并把它传给吉拉 编辑 此应用程序将使用Spring,因此密码很可能存储在bean配置文件中,而不是代码中。SOAP登录方法返回一个可用于会话的字符串标记,因此使用后无需将密码

我正在用Java编写一个应用程序,它需要在调用远程SOAP服务(JIRA)上的方法之前登录到该服务

我已经看了一些例子,例如如何做到这一点,但是我担心我需要在某些时候把密码放在内存中

我已经读到应该将密码存储为char[],但我仍然担心将密码存储在clear中

我应该如何存储客户端登录SOAP服务时使用的密码?我应该怎样读它并把它传给吉拉

编辑
此应用程序将使用Spring,因此密码很可能存储在bean配置文件中,而不是代码中。

SOAP登录方法返回一个可用于会话的字符串标记,因此使用后无需将密码存储在内存中。但我想你说的是长期使用。应用程序通常会有一个配置页面,允许设置更持久的身份验证,然后每次重新配置连接时都需要输入密码。

以下是我最终的决定

首先是一些澄清

  • 密码被加密并存储在数据库中
  • 密码是静态填充的(由DBA)
  • 这是一个加密和解密的练习,因此散列算法(如MD5)不适用
我研究了用SQL加密和用Java解密的方法,但都不是特别好。因此,我决定采取以下方法

  • 当DBA填充密码时,他们在输入密码时运行DBMS特定的加密方法(例如MySQL的加密)(例如,插入到creds(用户,密码)值('bob',encrypt('password'))
  • 作为属性传递给spring应用程序的检索密码的SQL包括解密(例如,选择用户、从creds解密(密码))
除此之外,这是一个用户管理和锁定数据库的练习。例如,只有某些人(DBA)获得完全访问权限,而应用程序使用只读用户


希望这对以后的其他人有所帮助。

好的一点-一旦获得身份验证令牌,我就可以擦除密码字符串。但是,应用程序是一个批处理过程,每次启动时都需要向JIRA进行身份验证(通常是每晚)。因此没有最终用户配置。我担心的是,我根本不喜欢将密码保留在源代码或Spring配置文件中。这就解释了为什么您的引用建议使用char[]…一旦密码进入一个不可变的字符串对象,它就不能被更改,直到它被垃圾收集。@phatfingers这是一个很好的问题,通常不会因为字符串池而被更改。我自己也尝试过这样做,但由于时间不够,我最终不得不放弃。我很好奇这是否可能。