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

Обеспечьте безопасную аутентификацию Facebook с помощью моего сервера

Я хотел бы создать небольшое мобильное приложение (Android и iOS) и небольшой сервер с REST Api.

Мои пользователи приложений (Android или iOS) должны войти в систему на facebook. Я делаю это, используя мобильную sdk на facebook. Когда логин был успешным, facebook sdk вернет authentificationToken, то есть теперь на смартфоне пользователей.

Идея такова: Всякий раз, когда моему приложению нужны некоторые данные, приложение будет подключаться к моему серверу (REST) ​​через HTTPS. Например: приложение делает простой HTTP GET и передает полученную аутентификацию FacebookToken. Мой сервер получает эту аутентификацию facebookToken и использует этот токен для определения, если пользователь аутентифицирован и получает информацию профиля facebook (имя, фамилия и т.д.). Таким образом, сервер также связывается с facebook и генерирует персонализированный ответ для запроса HTTP GET.

Мои вопросы:

  • Достаточно ли достаточно передать этот токен facebookAuthentication для каждого вызова API REST, чтобы заставить сервер получить правильный связанный пользователь facebook?
  • Я использую HTTPS, поэтому, я думаю, соединение достаточно зашифровано, верно?
  • Я предполагаю, что мне нужен механизм подписи, поэтому подписывайте каждый вызов API REST (через HTTPS), чтобы гарантировать, что токен facebookAuthentication отправлен только из моего мобильного приложения. Я бы сделал это, используя RSA с SHA-1, чтобы подписать любой вызов API REST. Но проблема с этим подходом заключается в том, что клиент должен хранить закрытый ключ где-то в приложении (для подписи запросов), а сервер знает открытый ключ (для подписи подписи). Это верно? Если да, я думаю, что это большая проблема с безопасностью, поскольку мобильное приложение (особенно android) можно декомпилировать, чтобы получить закрытый ключ. Как безопасно хранить этот секретный ключ в своем приложении? Есть ли другая система для подписи, которую вы можете порекомендовать?

Bt: Знаете ли вы хорошую RSA-библиотеку для iOS и Android?

4b9b3361

Ответ 1

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

2) Да. Он зашифрован в обоих направлениях.

3) Это круто. Он назывался дистанционной аттестацией. С этим связано много проблем.

Прежде чем идти в этом направлении, вам нужно задать себе два вопроса.

  • Кто вы защищаете?

  • Сколько я хочу инвестировать?

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

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

Вы можете прочитать о дистанционной аттестации здесь и здесь.

Решения, которые могут защитить вас от простой обратной инженерии, довольно сложны.

P.S. Что касается библиотеки RSA.

Посмотрите на это для Android:

Асимметричная криптография на Android

И это для iOS

Шифрование RSA с использованием открытого ключа