2014-02-12 2 views
0

Я использовал this tutorial для реализации REST api для приложения Yii. Он работает хорошо, но мне нужен совет по части аутентификации. В учебнике есть метод аутентификации, который получает имя пользователя и пароль (не зашифрованные) на 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, который шифрует данные во время их транспортировки. Но даже тогда остаются проблемы с HTTP basic auth. This answer on Security.SE lists them:

  • Пароль передается повторно, для каждого запроса. (Окно большей атаки)

  • Пароль кэшируется веб-браузером как минимум для длины окна/процесса. (Может быть тихо повторно использован любым другим запросом на сервер, например CSRF).

  • Пароль может храниться постоянно в браузере, если пользователь запрашивает. (То же, что и в предыдущем пункте, в дополнение может быть украден другим пользователем на общедоступном компьютере)

ли это достаточно безопасно, на самом деле зависит от уровня безопасности вашей службы требуется. Это высокий балл для ниши онлайн-игры? Это, наверное, хорошо. Это API, который позволяет получить доступ к чувствительным вещам? Тогда это может быть недостаточно, и, глядя на что-то вроде OAuth, может быть хорошей идеей.

+0

Хорошо, спасибо за то, что нашли время, какие-либо советы о том, как перейти на https? – Andrespch

+0

Это не тривиально - вам нужно получить сертификат и настроить сервер соответствующим образом. Возможно, вам захочется поговорить с вашим хостинг-провайдером или администратором сервера – NSPekka

Смежные вопросы