Привет, я работаю в Stormpath, так что решил заскочить сюда.
Сейчас, как вы, вероятно, знаете, мы поддерживаем только потоки OAuth2 предоставления пароля и предоставления учетных данных клиента. Мы работаем над поддержкой двух других потоков (код авторизации и неявный) в будущем, но это еще не все.
Если вы хотите стать СОБСТВЕННЫМ провайдером OAuth2 (что, как я полагаю, вам и нужно делать) и позволить ДРУГИМ разработчикам создавать приложения, которые регистрируют пользователей на своих веб-сайтах через ВАШ веб-сервис, то да, вам действительно нужно самостоятельно поддерживать код авторизации и/или типы неявных грантов.
Я работал с несколькими людьми над реализацией подобных вещей в прошлом.
Как правило, я рекомендую использовать серверную библиотеку OAuth2 с открытым исходным кодом на любом языке, который вы используете для обработки кода авторизации/неявного согласования, а затем просто сохранять пользователей и их токены в Stormpath и CustomData пользователя.
Если вы хотите получить более подробную информацию об этом, расширьте свой вопрос и оставьте комментарий ниже, и я обновлю свой ответ, чтобы отразить более подробную информацию.
ОБНОВЛЕНИЕ
Что касается библиотек Java - я попросил одного из моих коллег, который пишет все наши библиотеки Java, прокомментировать и дать вам рекомендацию =) Я парень Python / Node / Go, извините!
Теперь о токенах:
- Stormpath использует JWT для представления токенов доступа и обновления для OAuth2.
- Эти токены являются просто «строками», но они ДОЛЖНЫ храниться либо в браузере (с использованием файлов cookie), либо на клиентском устройстве (например, на мобильном телефоне), чтобы их можно было использовать правильно. Так что да - они ДОЛЖНЫ быть сохранены на клиенте!
Что бы я сделал для реализации (высокий уровень), это:
- Когда пользователь регистрируется на вашем веб-сайте, сохраняйте его в Stormpath, как обычно.
- Используйте библиотеку провайдера OAuth2 на Java для обработки потоков кода авторизации/неявного предоставления на вашем веб-сервере. Это потребует сохранения кода авторизации где-то в вашей базе данных.
Когда пользователь войдет в ваше приложение через код авторизации/неявный, вы сделаете следующее:
- Используйте библиотеку Java, чтобы представить пользователю экран с надписью «Вы, кроме этих разрешений?» йада йада йада...».
- Как только пользователь примет, сохраните код авторизации в CustomData учетной записи (он понадобится вам позже).
Когда пользователь отправляет запрос НАЗАД на ваш сервер с кодом авторизации и хочет получить токен доступа, вам необходимо:
- Возьмите CustomData учетной записи.
- Возьмите код авторизации из CustomData и убедитесь, что это тот же самый код, который пользователь отправляет вам.
- Если он действителен, сгенерируйте токен доступа 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