2016-05-21 6 views
0

Я использую gem 'rack-oauth2-server'. В настоящее время мне нужно добавить доступ к API по электронной почте/паролю из мобильного приложения.Oauth2 доступ к API по электронной почте/паролю

О проблеме: Gem предоставить токен доступа с конечной точки «oauth/access_token». Для этого требуются следующие параметры: «электронная почта», «пароль», «клиент_ид», «секрет». «client_id» и «secret» - поля клиента oauth из коллекции mongodb. У клиента есть доступ к области доступа. У меня мало пользователей. Для каждого типа пользователя должна быть разная область доступа (разные клиенты oauth).

Итак, проблема: я хочу разрешить доступ к api из мобильного приложения для любого типа пользователя, но перед входом в систему я не знаю, какой тип у пользователя. Таким образом, мобильное приложение не может знать, какие client_id и sercret должны быть переданы в запрос «oauth/access_token».

Возможно, существуют некоторые предварительные крючки для запросов на рельсы или другой метод для добавления параметров для запроса на лету (на стороне сервера)? Примечание: before_filter не может использоваться, потому что 'rack-oauth2-server' вызывается перед обратными вызовами.

P.S. Извините меня за мой плохой английский.

ответ

0

Возможно, существует предварительный крюк для запросов на рельсы или другой метод для добавления параметров для запроса на лету (на стороне сервера)? Примечание: before_filter не может использоваться, потому что 'rack-oauth2-server' вызывается перед обратными вызовами.

Rails приложение представляет собой стек Rack middleware. Таким образом, вы можете написать новый, который идентифицирует и добавляет/устанавливает/обновляет параметры запроса, которые вам нужны. В приведенной выше ссылке объясняется концепция и способы добавления/управления пользовательскими средними.

Итак, проблема: я хочу разрешить доступ к api из мобильного приложения для любого типа пользователя, но перед входом в систему я не знаю, у какого типа есть пользователь. Таким образом, мобильное приложение не может знать, какой client_id и sercret должен быть передан запросу 'oauth/access_token'.

Сказав это, кажется, вы путаете смысл client_id в контексте oAuth. Клиент - это приложение, в вашем случае мобильное приложение, которое зарегистрировано и подключается к вашей конечной точке oAuth. Таким образом, одно и то же мобильное приложение (в идеале) не должно соединяться с использованием разных client_id. Просто используйте разные формы или раскрывающийся список, который позволит вашим пользователям выбирать, как они хотят войти в систему, и установить соответствующий параметр scope.

PS. Поскольку вы используете тип гранта Client Credentials, убедитесь, что вы используете безопасное соединение.

+0

Спасибо. Попробуй это. –

Смежные вопросы