2012-01-06 131 views
0

我正在開發一個簡單的iPhone應用程序,用戶註冊並使用其電子郵件/密碼登錄。這些值存儲在遠程數據庫中。在iPhone應用程序中安全地存儲遠程數據庫憑證

我正在使用Cloudant存儲這些信息(CouchDB很棒),並且已經爲新用戶授予了只讀權限(創建的API密鑰/密碼)。爲了與Cloudant進行通信,您顯然需要一個URL來訪問它(例如https://user:[email protected]),它以字符串形式存儲在應用程序中。

現在,雖然我知道這是非常不安全的,但爲了保持數據庫URL安全(特別是它的用戶名/密碼),我無法想到其他任何替代方法。我已經看到有人談論使用另一臺服務器代理以獲取憑據,但它似乎有點尷尬。

任何幫助或想法將非常感激!

回答

1

您是否試圖從iPhone應用程序直接連接到數據庫?您不應該讓您的應用程序讀取整個遠程用戶表/數據庫。遲早有人會發現並將閱讀您的數據。無論您如何嘗試對其進行混淆,用戶/密碼組合都需要以某種方式存儲在您的應用中。

你應該做的是構建一個連接到你的數據庫並驗證你的用戶的Web服務。數據庫密碼保留在服務器上。這種代理方式並不笨拙,它是讓數據庫登錄遠離用戶的唯​​一方法。

+0

這就是我認爲會是這樣的情況。我的意思是在添加另一個具有Web服務的層(另一個服務器)方面很笨拙。但是,如果這是它必須的方式(和其他人做同樣的事情),那很好!我更喜歡最佳實踐方法,歡呼! – crawf 2012-01-07 00:08:36

+0

是的,在這種情況下的最佳做法是抽象存儲(數據庫)。網絡服務只會回答「用戶/合格組合正確」或「無效登錄」到您的應用程序。在這方面,它不是一個真正的代理服務器,把它想象成一個你可以通過HTTP訪問的服務器功能;) – shapecatcher 2012-01-07 00:36:45

+0

聽起來不錯!儘管Web服務的URL仍然位於應用程序內部,並且用戶憑證將通過POST發送。它比直接訪問數據庫要好。感謝您的洞察! – crawf 2012-01-07 00:44:35

1

一種選擇是在雲中創建自己的服務,將您的存儲抽象化。這也有利於您在不更新所有設備的情況下更改存儲空間。

在該模型中,服務存儲憑據以訪問存儲,並在應用程序層實現用戶安全性。我也不會認爲它是一個代理層 - 這意味着它是一個很薄的通道。如果您開發一項服務,您應該定義一個與存儲無關的Web界面(休息,肥皂)。在這種情況下,這是一種服務,而不是代理。

編輯:

通常情況下,網絡服務認證用戶(不寫你自己的)。具有SSL的基本身份驗證是典型的。然後,在該服務上下文API中,您可以訪問用戶名。從那裏開始,你就是你所需要的。您的存儲空間可以通過一個可以完全訪問所有內容的存儲帳戶訪問。

另一個auth選項是OAuth,它允許他們像谷歌這樣的人進行身份驗證 - 你永遠不會得到密碼 - 只是一個來自谷歌的令牌,讓你知道他們的身份驗證,他們是他們自稱的人。例如,這就是堆棧溢出的工作原理。

+0

因此,如果我有這個權利...對於一個典型的用戶登錄,他們會輸入他們的電子郵件/密碼,這是發送到服務器設置的服務。從那裏開始,它將與CloudAnt進行通信以驗證其登錄信息,該信息會將請求返回給服務,然後返回到應用程序。不過,這意味着雲服務URL將需要存儲在應用程序中。什麼是阻止某人直接訪問該URL? – crawf 2012-01-07 00:14:46

+0

通常,Web服務對用戶進行身份驗證(不要自己寫)。具有SSL的基本身份驗證是典型的。然後,在該服務上下文API中,您可以訪問用戶名。從那裏開始,你就是你所需要的。您的存儲空間可以通過一個可以完全訪問所有內容的存儲帳戶訪問。 – bryanmac 2012-01-07 12:46:41

+0

另一個auth選項是OAuth,它允許他們像谷歌這樣的人進行身份驗證 - 你永遠不會得到密碼 - 只是一個來自谷歌的令牌,讓你知道他們的身份驗證,他們是他們自稱的人。例如,這就是堆棧溢出的工作原理。 – bryanmac 2012-01-07 12:48:36

相關問題