2011-11-14 37 views
1

我正在同時開發iPhone應用程序和網站。我打算爲網站製作一個API,以便應用程序可以發送URL請求來完成任務。例如,他們發送一個請求到www.example.com/journal/add/1,它會將其ID爲1的項目添加到他們的日誌中。iPhone開發 - 如何通過遠程服務驗證用戶?

我不知道,是如何做我通過iPhone應用程序進行身份驗證?我希望他們只登錄一次,並保存他們的「會話」。我應該只是將用戶名/密碼存儲在plist中,然後每次發出請求時都要對其進行身份驗證(因此,我將不得不通過每個請求發送用戶名和密碼哈希值,例如www.example.com/journal/add/1/user/hash?似乎是hacky

回答

0

您可以嘗試oauth,或者實現一個簡單的密鑰系統,在這裏登錄的用戶可以獲得一個密鑰來進行後續請求,無論哪種方式你可以參考facebook,twitter,youtube apis,你可以看到他們是如何做到的,從那裏得到一些想法(他們都非常相似),雖然他們專注於讓外部用戶撥打電話,但你仍然可以做類似的事情...

+0

因此,要實現簡單的密鑰系統,我只需要在服務器上使用userID/key字段的表......當用戶在iPhone上登錄時,它會保存密鑰在iPhone和數據庫中。當用戶想要做某事時,iPhone會發送諸如「example.com/journal/add/1/key」之類的東西,並且服務器查找密鑰以查看哪個用戶被分配給該密鑰? –

+0

是的,當用戶登錄時,爲用戶ID分配一個隨機唯一的密鑰,然後後續請求包含密鑰在那裏......有一些附加的安全措施,例如簽名等,以避免各種類型的攻擊,例如如果您以明文形式發送密鑰用戶對,則有人可以嗅出它並使用該信息發出自己的請求。 – Daniel

+0

好的,謝謝。 –

0

而不是保持他們的登錄和通過你應該保持sessionid(使它使用時間,登錄和md5校驗和)

所以首先,用你的php腳本(你將需要使用數據庫)進行正常的授權,如果成功的話,將sessionid返回給iphone客戶端。 iphone客戶端在本地存儲它。那麼下次用戶啓動應用程序時,檢查sessionid是否存在:如果是,則將其發送到服務器以進行身份​​驗證。服務器檢查sessionid是否在數據庫中 - 如果是,它將成功返回給客戶端並更新數據庫中的會話ID(請記住,您可以爲sessionid添加時間戳,因此如果長時間不活動,用戶將不得不重新登錄)

聽起來很複雜,但並沒有那麼糟糕)

+0

好的,所以應用程序每次發出請求時都會向服務器發送會話ID?並且服務器的每個請求都會檢查會話ID,如果有,請獲取該會話的用戶ID,並將用戶請求的任何操作應用於該用戶ID?聽起來像是個計劃。 –

+0

@LoganSerman是的,確切地說。您可以使用會話ID快速輕鬆地識別您的用戶,而無需重新進行身份驗證 – Siegfried

相關問題