Добавление предоставления кода авторизации поверх StormPath

Мне нужно создать поставщика OAuth 2.0, и я хотел бы использовать StormPath для сохранения удостоверений и создания токенов доступа и токенов обновления. Однако StormPath не поддерживает предоставление кода авторизации. Итак, я рассматриваю возможность реализации гранта кода авторизации поверх StormPath. Это рекомендуется? Не могли бы вы порекомендовать лучший подход?


Какую библиотеку Java и какой NodeJS вы бы порекомендовали для реализации провайдера OAuth 2?

Мне нравится идея Stormpath использовать JWT, который не нужно сохранять в качестве токена доступа (правильно ли я понял?), и я хочу иметь его в своей системе. Итак, прав ли я, что должен использовать CustomData Stormpath для хранения кода авторизации, но использовать API Stormpath для создания токена? Или мне нужно создать свои собственные токены и использовать CustomData Stormpath для их хранения?


person Adi Levin    schedule 03.05.2016    source источник


Ответы (2)


Привет, я работаю в Stormpath, так что решил заскочить сюда.

Сейчас, как вы, вероятно, знаете, мы поддерживаем только потоки OAuth2 предоставления пароля и предоставления учетных данных клиента. Мы работаем над поддержкой двух других потоков (код авторизации и неявный) в будущем, но это еще не все.

Если вы хотите стать СОБСТВЕННЫМ провайдером OAuth2 (что, как я полагаю, вам и нужно делать) и позволить ДРУГИМ разработчикам создавать приложения, которые регистрируют пользователей на своих веб-сайтах через ВАШ веб-сервис, то да, вам действительно нужно самостоятельно поддерживать код авторизации и/или типы неявных грантов.

Я работал с несколькими людьми над реализацией подобных вещей в прошлом.

Как правило, я рекомендую использовать серверную библиотеку OAuth2 с открытым исходным кодом на любом языке, который вы используете для обработки кода авторизации/неявного согласования, а затем просто сохранять пользователей и их токены в Stormpath и CustomData пользователя.

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


ОБНОВЛЕНИЕ

Что касается библиотек Java - я попросил одного из моих коллег, который пишет все наши библиотеки Java, прокомментировать и дать вам рекомендацию =) Я парень Python / Node / Go, извините!

Теперь о токенах:

  • Stormpath использует JWT для представления токенов доступа и обновления для OAuth2.
  • Эти токены являются просто «строками», но они ДОЛЖНЫ храниться либо в браузере (с использованием файлов cookie), либо на клиентском устройстве (например, на мобильном телефоне), чтобы их можно было использовать правильно. Так что да - они ДОЛЖНЫ быть сохранены на клиенте!

Что бы я сделал для реализации (высокий уровень), это:

  • Когда пользователь регистрируется на вашем веб-сайте, сохраняйте его в Stormpath, как обычно.
  • Используйте библиотеку провайдера OAuth2 на Java для обработки потоков кода авторизации/неявного предоставления на вашем веб-сервере. Это потребует сохранения кода авторизации где-то в вашей базе данных.

Когда пользователь войдет в ваше приложение через код авторизации/неявный, вы сделаете следующее:

  1. Используйте библиотеку Java, чтобы представить пользователю экран с надписью «Вы, кроме этих разрешений?» йада йада йада...».
  2. Как только пользователь примет, сохраните код авторизации в CustomData учетной записи (он понадобится вам позже).

Когда пользователь отправляет запрос НАЗАД на ваш сервер с кодом авторизации и хочет получить токен доступа, вам необходимо:

  1. Возьмите CustomData учетной записи.
  2. Возьмите код авторизации из CustomData и убедитесь, что это тот же самый код, который пользователь отправляет вам.
  3. Если он действителен, сгенерируйте токен доступа JWT для пользователя, используя библиотеку JWT на Java. Я рекомендую JJWT: https://github.com/jwtk/jjwt

Когда пользователь отправляет токены доступа на ваш сервер, чтобы идентифицировать себя, вам необходимо:

  • Подтвердите JWT.
  • Возьмите HREF пользователя из JWT (что-то вроде https://api.stormpath.com/v1/accounts/xxx).
  • Получите учетную запись пользователя из Stormpath (по адресу href).
  • Используйте этот пользовательский объект для всего, что вам нужно =)

Надеюсь, это имеет смысл!

Это может показаться большой работой, но на самом деле это должно быть очень просто. Вам действительно нужна только библиотека OAuth2, чтобы помочь вам правильно обрабатывать данные запроса POST OAuth2 и помочь с такими вещами, как:

  • Определение разрешений (областей).
  • и т. д.
person rdegges    schedule 03.05.2016
comment
Спасибо! Я расширю свой вопрос для более подробной информации. - person Adi Levin; 03.05.2016
comment
rdegges, см. расширенный вопрос. Заранее спасибо! - person Adi Levin; 03.05.2016
comment
rdegges, спасибо большое! Вы упомянули, что являетесь специалистом по NodeJS + Python, поэтому можете порекомендовать библиотеку для OAuth 2, предоставляемую в NodeJS? а в питоне? - person Adi Levin; 03.05.2016
comment
@AdiLevin конечно! В python наилучшим вариантом является Oauthlib: oauthlib.readthedocs.io/en/latest/index .html. В Node лучше всего использовать сервер Oauth2: npmjs.com/package/node-oauth2- сервер - person rdegges; 03.05.2016
comment
rdegges, я последовал твоему совету и посмотрел на node-oauth2-server. Я вижу, что объект модели должен реализовывать saveAccessToken (npmjs.com/package/) и аналогично getAccessToken. Если я собираюсь использовать JWT без сохранения состояния для токена доступа, например токены, которые предоставляет Stormpath, должен ли я просто предоставить тривиальную реализацию и избежать сохранения, или я должен хранить токен доступа в CustomData Stormpath? - person Adi Levin; 03.05.2016
comment
Я бы сохранил токен в CustomData, чтобы вы могли легко извлечь/проверить его =) - person rdegges; 07.05.2016

Я евангелист Stormpath для Java-разработчиков.

Java SDK поддерживает тип предоставления кода авторизации через поставщиков SAML и социальных сетей, таких как Facebook и Google.

Интеграции более высокого уровня, такие как Servlet, Spring и Spring Boot, в настоящее время поддерживают потоки аутентификации внешнего поставщика через службу Stormpath ID Site.

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

Если вы хотите реализовать возможность быть поставщиком типа предоставления кода авторизации, я бы рекомендовал использовать Библиотека Apache Oltu. Вы по-прежнему можете интегрировать Stormpath с Oltu с помощью Stormpath Java SDK.

person afitnerd    schedule 03.05.2016
comment
Спасибо, афитнерд! Действительно, я хочу быть поставщиком типа предоставления кода авторизации. Я немного удивлен, что Oltu рекомендуется. Кажется, это плохо документировано. В любом случае, я предполагаю, что у вас есть веские причины рекомендовать его. Я поищу ресурсы, которые помогут мне начать работу. Если вы можете указать мне пример реализации или руководство, которое поможет мне в этом, это будет здорово :-) - person Adi Levin; 03.05.2016