2016-12-27 21 views
1

Мне нужно разработать API RESTful для мобильного приложения, и у меня есть некоторые проблемы с потоком связи между этими частями. Я новичок в разработке API для мобильных устройств и OAuth.REST API + OAuth + Mobile Flow

Проект объединяет должен работать таким образом:

  • пользователи могут войти, используя только их Google счета
  • мобильное приложение использует веб-сайт API и вся информация хранится на внутреннем интерфейсе

Я нашел аналогичный вопрос здесь OAuth on REST API for mobile app, и я предпочитаю первое решение от него, но у меня есть некоторые вопросы о безопасности этого решения.

1) Должен ли я использовать OAuth2 для API? Я не уверен, что это хорошая идея просто отправить идентификатор пользователя Google в API для получения данных пользователя.

2) Как проверить на сервере, что идентификатор Google является правильным и актуальным? Или это вообще не важно?

Я думаю об этом сценарии, но я не уверен, что это лучшее решение:

1) Пользователь входит в на мобильное приложение в первый раз, используя свой аккаунт Google.

2) Мобильное приложение получает идентификатор Google и дополнительную информацию.

3) Мобильное приложение отправляет идентификатор Google на сервер.

4) Сервер использует OAuth2. Он создает учетную запись для пользователя (сохраняя идентификатор Google в базе данных) и возвращает токен доступа в мобильное приложение.

5) Мобильное приложение локально хранит токен доступа и использует его для запросов на сервер. Как только токен доступа истекает, пользователь снова должен войти в мобильное приложение, используя свою учетную запись Google.

У меня есть некоторые проблемы с использованием только идентификатора Google для создания токена. Я имею в виду, что любой может использовать какой-либо Google ID для создания токена. Плохая идея :(

Кроме того, я должен использовать JWT лучше в знак?

Спасибо за вашу помощь!

ответ

1
  1. Вы должны послать пользователь id_token к API вместо
  2. Есть целые пару разных ways, в которых вы можете проверить целостность идентификационной метки на стороне сервера:

    a) «Вручную» - постоянно загружать общедоступную информацию Google k eys, проверить подпись, а затем каждое поле, включая iss; основное преимущество (хотя и небольшое, на мой взгляд) я вижу здесь, что вы можете свести к минимуму количество запросов, отправленных в Google.

    б) "Автоматически" - сделать GET на конечной точке Google, чтобы проверить этот маркер https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}

    с) Использование Google API Client Library.

Что касается процесса, то в основном правильно, за исключением последнего шага, за исключением того, где вы можете вместо refresh an access token без запроса разрешения у пользователя. Кстати, Google id_token на самом деле является JWT.

+0

Спасибо! Это очень полезно – Elena