Аутентификация запросов с мобильных устройств (iPhone )приложения к веб-API ASP.Net (Запрошен отзыв о моем дизайне)

Я разрабатываю веб-сайт, у которого будет мобильный компаньон (изначально только для iPhone ). Веб-сайт будет приложением ASP.Net MVC 3. У меня также будет сайт веб-API ASP.Net (MVC 4 )для предоставления услуг приложению iPhone. Приложение для iPhone будет иметь собственную форму для получения имени пользователя и пароля от пользователя и отправки их в веб-API в заголовках JSON.

Я хочу подумать о безопасности с самого начала, а не задним числом. Я ни в коем случае не эксперт по безопасности. Я провел большое исследование, чтобы узнать, как другие обрабатывают аутентификацию клиента мобильного приложения из веб-службы. Я думаю, что придумал достойное решение, которое не требует подключения к сторонним oAuth.

Я был бы очень признателен за любые мнения, советы, критику и общие WTF, которые любой из вас может предложить.:)

Больше всего меня беспокоит:

  1. Обеспечение авторизации вызовов веб-API
  2. Сведение к минимуму риска повторных атак (, следовательно, временные метки в вызовах ниже)

Приложение для iPhone будет разработано как таковое :
. Две строки жестко -закодированы в приложении для iPhone (одинаковые значения для каждого пользователя):

  1. Идентификатор приложения
    Это строка, которая используется для определения типа клиента, который обращается к веб-API (iPhone, Android, Windows phone и т. д. ).

  2. Соль для хэширования приложения
    Это строка, которая используется для соления хэшей для пользовательских -агностических запросов.

Две строки хранятся в локальной базе данных приложения iPhone (значения уникальны для каждого пользователя):

  1. Маркер доступа пользователя API
    Это строковый токен (), предоставляемый клиенту веб-API после успешной аутентификации и позволяющий клиенту получить доступ к веб-API без отправки имени пользователя и пароля в каждом запросе.
  2. Соль для хеширования пользователя
    Это строка, которая используется для соления хэшей для запросов, сделанных против установленных учетных записей пользователей.



iPhone будет совершать вызовы веб-API следующим образом:

Метод API :Создать учетную запись
Клиент отправляет:

  • Новые данные учетной записи (Имя пользователя, пароль, имя, фамилия и т. д.)
  • Идентификатор приложения
  • Отметка времени UTC
  • Хэш временной метки UTC + идентификатор приложения с солью хеширования приложения

Возвраты API:

  • Соль для хеширования нового пользователя

    Идея заключается в том, что при создании учетной записи я могу использовать жестко закодированную соль приложения, так как это не представляет большой угрозы безопасности, если эта соль когда-либо выйдет (посредством декомпиляции или каким-либо другим способом ).

    Но для методов, которые получают доступ и изменяют данные пользователя, я буду использовать соль, которая принадлежит только этому пользователю, поэтому злоумышленник не может использовать ее для олицетворения других.


Метод API :Получить учетную запись
(Используется для получения хэш-соли пользователя для учетных записей, созданных на веб-сайте, но еще не синхронизированных на iPhone. Это происходит, когда пользователь пытается войти в систему на iPhone, и iPhone обнаруживает, что у него нет записи для этого имени пользователя.)

Клиент отправляет:

  • Имя пользователя
  • Пароль (хеширован с помощью хеширующей соли приложения)
  • Идентификатор приложения
  • Отметка времени UTC
  • Хэш временной метки UTC + идентификатор приложения с солью хеширования приложения

Возвраты API:

  • Хеширующая соль существующего пользователя


Метод API :Вход в систему (Аутентификация)
Клиент отправляет:

  • Имя пользователя
  • Пароль (хеширован с помощью хэш-соли пользователя)
  • Идентификатор приложения
  • Отметка времени UTC
  • Хэш временной метки UTC + идентификатор приложения с солью хеширования пользователя

Возвраты API:

  • Маркер доступа пользователя API


Метод API :Любая команда (, т. е. создание публикации, обновление профиля, получение сообщений и т. д.)
Клиент отправляет:

  • Данные команды
  • Маркер доступа пользователя API
  • Идентификатор приложения
  • Отметка времени UTC
  • Хэш временной метки UTC + идентификатор приложения + токен доступа пользователя к API с солью хеширования пользователя
49
задан Stoop 9 August 2012 в 07:17
поделиться