Как аутентифицировать REST API с интеграцией Stormpath с Facebook

Я разрабатываю простой REST API с Stormpath интеграцией с Facebook и думаю, какой шаблон лучше всего подходит для аутентификации пользователей. В настоящее время у меня нет конечной точки для создания пользователя, поэтому все запросы к моим конечным точкам аутентифицируются следующим образом:

  1. Получить объект Stormpath Application на основе API_ID и API_SECRET, настроенных в моем приложении
  2. Получить объект Stormpath Account на основе токена Facebook, указанного в каждом запросе
  3. На основе статуса учетной записи аутентифицировать запрос или отклонить

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

Мне также нужно было бы получить/сгенерировать уникальный идентификатор пользователя, чтобы я мог установить некоторые отношения с данными пользователя в моей системе - так что еще один вопрос, какой подход здесь лучше всего:

  1. Создайте какой-нибудь уникальный идентификатор, свяжите его с электронной почтой пользователя, полученной от Stormpath, и сохраните в моей системе — я думаю, что это немного нарушает идею такой службы, как Stormapth, которая инкапсулирует все пользовательские данные.
  2. Сделайте то же самое, что и выше, но сохраните его в учетной записи Stormpath customData.
  3. Используйте идентификатор пользовательского ресурса Stormapth, который можно получить из пользовательского URI.

Пожалуйста посоветуй.

Просто для протокола: я использую Stormpath Java SDK и разрабатываю API как серверную часть для мобильных устройств. социальное приложение, поэтому безопасность очень важна для меня.


person mkorszun    schedule 05.05.2015    source источник


Ответы (1)


Полное раскрытие, я управляю продуктом @ Stormpath. Я буду использовать ваши отзывы для улучшения документации.

Трудно сказать, безопасно это или нет, не разбираясь в REST API, который вы создаете. Если бы вы сделали REST API для изображений кошек, мой ответ отличался бы от медицинской/финансовой информации. Один из способов взглянуть на это заключается в том, что у Facebook есть Graph API (REST), и они защищают доступ, требуя того же токена доступа, который вы используете. Есть и другие флаги, которые заставят меня сказать, что это небезопасно, например, если вы используете HTTP без TLS.

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

Как и где вы храните информацию, зависит от ваших потребностей. Если вы начинаете с аутентификации учетной записи пользователя с помощью Stormpath, имеет смысл поместить уникальный идентификатор/первичный ключ в customData учетной записи пользователя. Если вы начинаете с запроса в хранилище данных пользовательских данных и вам необходимо получить учетную запись пользователя Stormpath, вам потребуется сохранить href для учетной записи пользователя в своем хранилище данных.

Приятной особенностью Stormpath SDK для Java является то, что когда вы выполняете аутентификацию в Facebook, возвращаемый объект будет раскрывать, была ли учетная запись создана заново или у Stormpath уже есть учетная запись для токена доступа:

https://docs.stormpath.com/java/apidocs/com/stormpath/sdk/provider/ProviderAccountResult.html

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

person Tom Abbott    schedule 05.05.2015
comment
Я хочу, чтобы этот API был бэкэндом для мобильного социального приложения, поэтому здесь важна безопасность. Я думаю, что буду придерживаться того, что у меня есть на данный момент, но хотел бы видеть в будущем некоторую обновленную документацию с упором на шаблоны входа в систему через социальные сети / API-аутентификацию / лучшие практики использования Stormpath. - person mkorszun; 05.05.2015