Java 通过SOAP服务向JIRA进行身份验证时存储安全密码
我正在用Java编写一个应用程序,它需要在调用远程SOAP服务(JIRA)上的方法之前登录到该服务 我已经看了一些例子,例如如何做到这一点,但是我担心我需要在某些时候把密码放在内存中 我已经读到应该将密码存储为char[],但我仍然担心将密码存储在clear中 我应该如何存储客户端登录SOAP服务时使用的密码?我应该怎样读它并把它传给吉拉 编辑Java 通过SOAP服务向JIRA进行身份验证时存储安全密码,java,security,soap,passwords,jira,Java,Security,Soap,Passwords,Jira,我正在用Java编写一个应用程序,它需要在调用远程SOAP服务(JIRA)上的方法之前登录到该服务 我已经看了一些例子,例如如何做到这一点,但是我担心我需要在某些时候把密码放在内存中 我已经读到应该将密码存储为char[],但我仍然担心将密码存储在clear中 我应该如何存储客户端登录SOAP服务时使用的密码?我应该怎样读它并把它传给吉拉 编辑 此应用程序将使用Spring,因此密码很可能存储在bean配置文件中,而不是代码中。SOAP登录方法返回一个可用于会话的字符串标记,因此使用后无需将密码
此应用程序将使用Spring,因此密码很可能存储在bean配置文件中,而不是代码中。SOAP登录方法返回一个可用于会话的字符串标记,因此使用后无需将密码存储在内存中。但我想你说的是长期使用。应用程序通常会有一个配置页面,允许设置更持久的身份验证,然后每次重新配置连接时都需要输入密码。以下是我最终的决定 首先是一些澄清
- 密码被加密并存储在数据库中
- 密码是静态填充的(由DBA)
- 这是一个加密和解密的练习,因此散列算法(如MD5)不适用
- 当DBA填充密码时,他们在输入密码时运行DBMS特定的加密方法(例如MySQL的加密)(例如,插入到creds(用户,密码)值('bob',encrypt('password'))
- 作为属性传递给spring应用程序的检索密码的SQL包括解密(例如,选择用户、从creds解密(密码))
希望这对以后的其他人有所帮助。好的一点-一旦获得身份验证令牌,我就可以擦除密码字符串。但是,应用程序是一个批处理过程,每次启动时都需要向JIRA进行身份验证(通常是每晚)。因此没有最终用户配置。我担心的是,我根本不喜欢将密码保留在源代码或Spring配置文件中。这就解释了为什么您的引用建议使用char[]…一旦密码进入一个不可变的字符串对象,它就不能被更改,直到它被垃圾收集。@phatfingers这是一个很好的问题,通常不会因为字符串池而被更改。我自己也尝试过这样做,但由于时间不够,我最终不得不放弃。我很好奇这是否可能。