Подтвердить что ты не робот

Аутентификация API и приложений с использованием маркера Devise, Doorkeeper и OAuth2

У меня есть приложение для рабочего стола и мобильное приложение. Я хочу использовать одно и то же приложение rails для обоих "устройств". Другими словами, я хочу, чтобы мобильное приложение запрашивало содержимое в приложении Desktop.

Я использую Devise для аутентификации (адрес электронной почты + пароль). Я выполнил Doorkeeper в приложении Desktop, чтобы создать токен Oauth2 для моего мобильного приложения.

Вот мои вопросы:

У меня есть параметры before_filters в контроллерах настольных приложений для их защиты.

  • Я не уверен, как мобильное приложение должно делиться маркером OAuth2 с помощью Devise для проверки подлинности и доступа к моим защищенным контроллерам?

Фактически, сейчас Doorkeeper должен проверять мобильный токен в моих контроллерах с кодом doorkeeper_for :all. Но для этого мне не удается защитить устройство before_filter :authenticate_user!...

Должен ли я сохранить токен oauth в разработке тоже?

Я не понимаю, как мобильные приложения должны аутентифицироваться с помощью разработки и протокола OAuth2?

спасибо

4b9b3361

Ответ 1

Это старый, но ответа еще нет.

Essential Devise и Doorkeeper делают то же самое, Devify аутентифицируется с использованием сеансов (или токена auth, если вы включили это), в то время как Doorkeeper выполняет аутентификацию с помощью токенов OAuth, отправленных в каждом запросе.

Что вы, вероятно, захотите сделать, это разделить приложение на две точки доступа, иметь обычный доступ к рабочему столу с помощью Devise и API, который использует Doorkeeper. Включить маршруты разработки только для обычных контроллеров рабочего стола и разрешить маршруты для прикрытия только для контроллеров api.

В вашем API-интерфейсе приложений вы можете переопределить current_user как нечто вроде User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token. Это будет соответствовать тому, как Devise также аутентифицируется.

В качестве альтернативы, если вашему API не нужно использовать OAuth, вы можете использовать Devise token_authenticable config, который предоставляет аналогичные функции, такие как OAuth Bearer Tokens.

Ответ 2

Я не уверен, понял ли я ваш вопрос, но Doorkeeper полностью блокирует ваш контроллер. Нет доступа через аутентификацию Devise, если у вас есть doorkeeper_for :all в вашем контроллере.

Вам понадобится отдельный контроллер для обмена данными через OAuth2, например, с помощью контроллера API. Затем вы можете запросить данные, например. через protocol://myapp:1234/ressource?access_token=thetoken.

Это то, о чем вы просили? Else, пожалуйста, уточните:)