2010-08-18 94 views
17

我正在創建我的第一個iPad應用程序。我有一個Web應用程序,我想對其進行身份驗證並從RESTful方式提取數據。iOS:如何使安全的HTTPS連接傳遞憑證?

如果您在瀏覽器中打開網址(https://myapp.com/auth/login),您將會得到一個表單來輸入您的用戶名和密碼。我想我可以在請求的發佈數據中設置登錄憑證並提交數據。

該站點使用HTTPS進行登錄,以便憑證不會以純文本格式通過Internet傳遞。

如何創建安全的HTTPS連接來傳遞憑證?請問這是否記得我已經登錄以備將來要求?做這個的最好方式是什麼?

回答

13

進一步的更新,2013年10月

雖然在我寫這個答案時,ASIHTTPRequest維持一個廣泛的支持,這已不再是這種情況。不建議用於新項目 - 直接使用NSURLConnection,或使用AFNetworking。

隨着AFNetworking,有一個[httpClient setAuthorizationHeaderWithUsername:username password:password];方法進行HTTP身份驗證,並創建一個POST樣式表格也同樣容易 - 見AFNetworking Post Request


原來的答覆:

很多人使用ASIHTTPRequest類來處理HTTP & HTTPS在iPhone/iPad的,因爲它有很多有用的功能,是困難或費時實現與內置類:

http://allseeing-i.com/ASIHTTPRequest/

在最簡單的級別開始,你會喜歡的東西開始:

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

    [request startSynchronous]; 
    NSError *error = [request error]; 
    if (!error) { 
     NSString *response = [request responseString]; 
     NSLog(@"response = %@", response); 
    } 

如果您使用HTTP身份驗證,ASIHTTPRequest將自動提示用戶輸入用戶名和密碼。

如果您使用其他形式的身份驗證,您可能需要自己向用戶請求用戶名和密碼,並將它們作爲POST值或自定義http頭提交,然後響應可能會包含令牌在JSON或XML響應中,或者它可以設置一個cookie。

如果您添加更多關於認證方案如何工作的細節,我可以更具體一些。

更新

基於更新,效仿你只需要添加線條像一個POST形式:

[request addPostValue:usernameString forKey:@"username"]; 
[request addPostValue:passwordString forKey:@"password"]; 

您還需要改變你創建請求的方式而不是:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

做:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

(我也忘了提及它,以前我提到的代碼是使用同步請求,所以你想用異步代碼替換它,以避免在你證明它正在工作時阻塞UI。 )

還有這裏的iphone一個JSON框架:

http://code.google.com/p/json-framework/

這對我來說工作得很好,就是簡單的用ASIHTTPRequest使用。

+0

我加了一點點解釋。該應用程序不是基本的HTTP身份驗證。它是在您輸入您的憑證的網頁上顯示的表單。我試圖調整它,以便它可以充當RESTful API,我可以對其進行身份驗證並查詢數據(這些數據將以JSON格式返回)。 – Andrew 2010-08-18 20:03:19

+0

好的,我已經更新了一些更詳細的答案。從本質上講,ASIHTTPRequest應該都很簡單。 – JosephH 2010-08-18 20:36:08

+0

因此,一旦我將請求「發佈」到/ auth/login,我的iPhone應用程序是否會記住它已通過身份驗證?在瀏覽器中,有Cookie被設置。換句話說,現在我已經過「身份驗證」,我可以提出另一個要求您進行身份驗證的請求嗎? (即GET/users/all) – Andrew 2010-08-19 19:09:34