Oauth2 доступ к API по электронной почте / паролю
Я использую гем 'rack-oauth2-server'. В настоящее время мне нужно добавить доступ к API по электронной почте / паролю из мобильного приложения.
О проблеме: Gem предоставляет токен доступа от конечной точки 'oauth/access_token'. Для этого требуются следующие параметры: 'email', 'password', 'client_id', 'secret'. 'client_id' и 'secret' - поля oauth-клиента из коллекции mongodb. У клиента есть настройка доступа к области. У меня есть несколько типов пользователей. Для каждого типа пользователя будет разная область доступа (разные клиенты oauth).
Итак, проблема: я хочу разрешить получать доступ к API из мобильного приложения для любого типа пользователя, но до входа в систему я не знаю, какой тип имеет пользователя. Таким образом, мобильное приложение не может знать, какие client_id и sercret следует передать в запрос "oauth / access_token".
Может быть, существует какой-то предварительный хук для запросов rails или другой метод добавления параметров в запрос на лету (на стороне сервера)? Примечание: before_filter не может использоваться, потому что 'rack-oauth2-server' вызывается перед обратными вызовами.
PS Простите за мой плохой английский.
1 ответ
Может быть, существует какой-то предварительный хук для запросов rails или другой метод добавления параметров в запрос на лету (на стороне сервера)? Примечание: before_filter не может использоваться, потому что 'rack-oauth2-server' вызывается перед обратными вызовами.
Приложение Rails представляет собой стек промежуточного программного обеспечения Rack. Таким образом, вы можете написать новую, которая идентифицирует и добавляет / устанавливает / обновляет переменные запроса, которые вам нужны. Ссылка выше объясняет концепцию и как добавить / управлять пользовательскими промежуточными программами.
Итак, проблема: я хочу разрешить получать доступ к API из мобильного приложения для любого типа пользователя, но до входа в систему я не знаю, какой тип имеет пользователя. Таким образом, мобильное приложение не может знать, какие client_id и sercret следует передать в запрос "oauth / access_token".
Сказав это, кажется, что вы путаете смысл client_id
в контексте oAuth. Клиент - это приложение, в вашем случае мобильное приложение, которое зарегистрировано и подключается к вашей конечной точке oAuth. Таким образом, одно и то же мобильное приложение (в идеале) не должно подключаться с использованием разных client_id
s. Просто используйте другие формы или раскрывающийся список, которые позволят вашим пользователям выбрать способ входа в систему и установить соответствующие scope
пары.
PS. Так как вы используете Client Credentials
тип предоставления, убедитесь, что вы используете безопасное соединение.