Подтвердить что ты не робот

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

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

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

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

Мои самые большие проблемы:

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

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

  • Идентификатор приложения
    Это строка, которая используется для идентификации типа клиента, который обращается к веб-API (iPhone, Android, телефона Windows и т.д.). < ш >
  • Сочетание хищников приложений
    Это строка, которая используется для солевых хешей для пользовательских запросов.

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

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



IPhone выполнит вызовы веб-API следующим образом:

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

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

Возврат API:

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

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


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

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

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

Возврат API:

  • Существующая пользовательская соляная сварка


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

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

Возврат API:

  • токен доступа к API


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

  • Данные команды
  • токен доступа к API
  • Идентификатор приложения
  • Временная метка UTC
  • Хеш отметки времени UTC + Идентификатор приложения + Пользовательский токен пользователя API, соленая с помощью Hash Salt
4b9b3361

Ответ 1

Мои предложения

  • Аутентификация и авторизация. Создайте его на двух разных серверах (в некоторых проектах я также использовал 3). Обратные прокси-серверы действительно хороши в этом. Аутентификация на одном сервере и авторизация на другом.

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

  • Инкапсулируйте все.

  • Используйте SSL для всей защищенной информации. В моем случае я использую его для всего.

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

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

Запросы, о которых вы упомянули, являются стандартными нормами. На самом деле не вижу проблемы с этим.

Ответ 2

В VS 2013 вы можете использовать шаблон "Asp MVC SPA Application" для создания рабочей реализации, которая генерирует Okenh2-токен-носитель при авторизации и авторизации для вызовов контроллера WebApi с использованием атрибутов [Authorize]. Он использует Membership и Entity Framework для хранения пользователей и хэшей локально на SQL Server. Просто удалите части asp mvc, которые вам не нужны, и сохраните часть Auth для WebApi. Подробнее здесь: http://msdnrss.thecoderblogs.com/2013/09/understanding-security-features-in-the-spa-template-for-vs2013-rc/