通过 SOAP 服务向 JIRA 进行身份验证时安全密码存储
Posted
技术标签:
【中文标题】通过 SOAP 服务向 JIRA 进行身份验证时安全密码存储【英文标题】:Secure password storing while authenticating to JIRA via SOAP service 【发布时间】:2012-09-13 00:31:18 【问题描述】:我正在用 Java 编写一个应用程序,它需要先登录到远程 SOAP 服务 (JIRA),然后才能调用该服务上的方法。
我已经查看了如何执行此操作的示例,例如 http://www.j-tricks.com/1/post/2010/8/jira-soap-client.html,但我担心我需要在某些时候将密码放入内存中。
我已经读过我应该将密码存储为 char[],但我仍然担心以明文形式存储密码。
我应该如何存储我的客户用来登录 SOAP 服务的密码?我应该如何阅读它并将其传递给 JIRA?
编辑 此应用程序将使用 Spring,因此密码可能会存储在 bean 配置文件中而不是代码中。
【问题讨论】:
一个很好的问题。我自己也试过这样做,但由于时间不够,我最终不得不放弃。我很好奇这是否可能。 【参考方案1】:SOAP 登录方法返回一个可用于会话的字符串令牌,因此使用后无需将密码存储在内存中。但我认为你在谈论长期使用。应用程序通常会有一个配置页面,以允许设置更永久的身份验证,然后每次重新配置连接时都需要输入密码。
【讨论】:
好点 - 一旦获得身份验证令牌,我可以擦除密码字符串。但是,该应用程序是一个批处理过程,每次启动时都需要通过 JIRA 进行身份验证(通常是每晚)。所以没有最终用户配置。我担心的是我根本不喜欢将密码留在源代码或 Spring 配置文件中。 这可以解释为什么您的参考文献推荐使用 char[] ...一旦密码进入不可变的 String 对象,在被垃圾收集之前无法更改。 @phatfingers 这通常不是由于字符串池【参考方案2】:这是我最终决定的。
首先,做一些澄清。
密码经过加密并存储在数据库中。 密码是静态填充的(由 DBA)。 这是一个加密和解密练习,因此哈希算法(例如 MD5)不适用。我研究了用 SQL 加密和用 Java 解密的方法,但没有一个特别好。因此,我决定采用以下方法。
当 DBA 填充密码时,他们在输入密码时运行 DBMS 特定的加密方法(例如 mysql 的加密)(例如插入 creds(user,password) 值 ('bob',encrypt('password')) ; 检索密码的 SQL 作为属性传递给 Spring 应用程序,包括解密(例如,从凭据中选择用户,解密(密码))。除此之外,这是一个用户管理和锁定数据库的练习。例如。只有某些人 (DBA) 可以获得完全访问权限,并且应用程序使用只读用户。
希望这对将来的其他人有所帮助。
【讨论】:
以上是关于通过 SOAP 服务向 JIRA 进行身份验证时安全密码存储的主要内容,如果未能解决你的问题,请参考以下文章