2012-09-20 46 views
3

我正在編寫一個Java應用程序,需要在調用該服務的方法之前登錄到遠程SOAP服務(JIRA)。通過SOAP服務向JIRA進行身份驗證時存儲安全密碼

我看過如何做到這一點的例子,例如http://www.j-tricks.com/1/post/2010/8/jira-soap-client.html,但是我擔心我需要把密碼放到內存中。

我讀過,我應該將密碼存儲爲char [],但仍然存在,我很擔心密碼存儲在明文中。

我該如何存儲我的客戶端用來登錄SOAP服務的密碼?我應該如何閱讀並傳遞給JIRA?

編輯 該應用程序將使用Spring所以這是有可能的密碼將被保存在bean配置文件中,而不是在代碼中。

+0

一個很好的問題。我自己試過這樣做,但由於時間不夠,最終不得不放棄。我很好奇,如果有可能的話。 –

回答

0

SOAP登錄方法返回一個可用於會話的字符串標記,因此在使用它之後不需要將密碼存儲在內存中。但我認爲你在談論長期使用。應用程序通常會有一個配置頁面,以允許建立更永久的身份驗證,然後每次連接重新配置時都需要輸入密碼。

+0

好處 - 一旦獲得認證令牌,我可以擦除密碼字符串。然而,應用程序是一個批處理過程,每次啓動時(通常每晚)都需要使用JIRA進行驗證。所以沒有最終用戶配置。我擔心的是,我並不特別喜歡將密碼保存在源代碼或Spring配置文件中。 – johnmmcparland

+0

這就解釋了爲什麼你的引用推薦一個char [] ...一旦密碼找到它進入一個不可變的String對象的方式,它不能被改變,直到它被垃圾回收。 – phatfingers

+0

@phatfingers通常不會由於字符串池 – Woot4Moo

0

這是我最終決定的。

首先,一些澄清。

  • 密碼被加密並存儲在數據庫中。
  • 密碼是靜態填充的(由DBA)。
  • 這是加密和解密的練習,因此哈希算法(如MD5)不適用。

我研究了SQL中的加密和Java中的解密方式,但沒有一個特別好。所以我決定採取以下方法。

  • 當DBA填充密碼,它們運行的​​特定於DBMS的加密方法(例如MySQL的加密)輸入密碼(例如插入creds(用戶名,密碼)值(「鮑勃」,加密(當「密碼「));
  • 的SQL中檢索密碼,傳遞到彈簧應用程序作爲一個屬性,包括所述解密(例如選擇用戶,解密(密碼)從creds)比

其他,這是用戶管理和鎖定數據庫的練習,例如,只有某些人(DBA)可以完全訪問並且應用程序使用只讀用戶。

希望這可以幫助別人在未來。

相關問題