2014-02-12 132 views
0

我已經使用this tutorial爲Yii應用實現REST api。它運作良好,但我需要在認證部分提供建議。在本教程中,有一種方法可以在2個頭文件中接收用戶名和密碼(未加密),根據教程,我可以使用相同的方法在每個API調用中檢查用戶數據。yii Rest api身份驗證iOS應用

這是身份驗證方法的代碼

private function _checkAuth() 
{ 
    // Check if we have the USERNAME and PASSWORD HTTP headers set? 
    if(!(isset($_SERVER['HTTP_X_USERNAME']) and isset($_SERVER['HTTP_X_PASSWORD']))) { 
     // Error: Unauthorized 
     $this->_sendResponse(401); 
    } 
    $username = $_SERVER['HTTP_X_USERNAME']; 
    $password = $_SERVER['HTTP_X_PASSWORD']; 
    // Find the user 
    $user=User::model()->find('LOWER(username)=?',array(strtolower($username))); 
    if($user===null) { 
     // Error: Unauthorized 
     $this->_sendResponse(401, 'Error: User Name is invalid'); 
    } else if(!$user->validatePassword($password)) { 
     // Error: Unauthorized 
     $this->_sendResponse(401, 'Error: User Password is invalid'); 
    } 
} 

所以,我有以下問題:

1 - 它是不安全的使用這個方法給出的事實,我發送用戶名和密碼加密?

2-我應該考慮爲此實現Oauth2嗎?這個API只有2個方法我現在會使用,所以如果不是絕對必要的話,我不想花太多時間在額外的授權協議上。

任何幫助非常感謝。

感謝

回答

0

HTTP基本身份驗證(使用的身份驗證方法)是不是可以成爲平凡分成,但它發送純文本格式在導線上的認證信息,反反覆覆,對每個請求。

這個問題可以通過使用HTTPS來解決,HTTPS會在傳輸數據時加密數據。但即使如此,HTTP基本身份驗證仍然存在問題。 This answer on Security.SE lists them:

  • 密碼重複發送,爲每個請求。 (更大的攻擊窗口)

  • 密碼由網頁瀏覽器緩存,至少是窗口/進程的長度。 (可以通過對服務器的任何其他請求(例如CSRF)進行靜默重用。

  • 如果用戶請求,密碼可以永久存儲在瀏覽器中。 (同前一點,除了可能會被其他用戶共享計算機上竊取 )

無論是足夠安全實際上取決於安全級別的服務需要。這是一個利基網絡遊戲的高分嗎?這可能很好。它是一種允許訪問敏感內容的API嗎?那麼它可能不夠好,而查看類似OAuth的東西可能是一個好主意。

+0

好的感謝您抽出時間,對如何更改爲https的任何建議? – Andrespch

+0

這不是微不足道的 - 您需要獲得證書並相應地設置服務器。您可能想與您的託管服務提供商或服務器管理員交談 – NSPekka