OAuth2::Ошибка привратника

Всякий раз, когда я пытаюсь пройти аутентификацию у провайдера привратника, я всегда получаю следующую ошибку

invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client. {"error":"invalid_grant","error_description":"The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client."}

Я пробовал с другими клиентами привратника, но все равно та же ошибка

Клиент привратника:

  1. https://github.com/doorkeeper-gem/doorkeeper-devise-client.git
  2. http://dev.mikamai.com/post/112508735689/oauth2-on-rails-the-client-application

Поставщик привратника:

https://github.com/doorkeeper-gem/doorkeeper-provider-app.git


person M.R    schedule 29.10.2015    source источник


Ответы (2)


Я решил это, понизив версию драгоценного камня omniauth-oauth2 до версии 1.3.1, упомянутой здесь - https://github.com/inridea/omniauth-oauth2/issues/81

person M.R    schedule 30.10.2015

Хотя переход на версию gem 'omniauth-oauth2', '~> 1.3.1' является решением, в Вики-страница Doorkeeper's Create-a-OmniAuth-strategy-for-your-provider упоминается, что в вашей реализации Стратегии OmniAuth для Doorkeeper должен присутствовать следующий метод :

  # https://github.com/intridea/omniauth-oauth2/issues/81
  def callback_url
    full_host + script_name + callback_path
  end

В упоминаемой проблеме omniauth-oauth2 #81 ведется долгое обсуждение.

Я лично столкнулся с сообщением об ошибке, когда пытался протестировать моего провайдера привратника на основе Rails 5 Devise с помощью клиентского приложения на основе Rails 5 Devise, чтобы позволить пользователям провайдера подключать свои аккаунт в моем клиентском приложении.

В отсутствие упомянутого метода в моем OmniAuth::Strategies::Doorkeeper на внешнем интерфейсе Devise OmniauthCallbacksController высвечивалось сообщение Invalid Credentials, а в журналах сервера клиент-приложения была замечена следующая ошибка:

  Started GET "/users/auth/doorkeeper" for 127.0.0.1 at 2017-08-22 17:45:02 +0530
  I, [2017-08-22T17:45:02.386866 #14535]  INFO -- omniauth: (doorkeeper) Request phase initiated.
  Started GET "/users/auth/doorkeeper/callback?code=1b833bcc09651f98b0424a7afb1e60bd50fdcc765daf7d499bcefb5554457187&state=c215fd707ecd71c6ad0f6b5e58fa0d2da7210d86946d41e3" for 127.0.0.1 at 2017-08-22 17:45:03 +0530
  I, [2017-08-22T17:45:03.506424 #14535]  INFO -- omniauth: (doorkeeper) Callback phase initiated.
  E, [2017-08-22T17:45:03.523737 #14535] ERROR -- omniauth: (doorkeeper) Authentication failure! invalid_credentials: OAuth2::Error, invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
  {"error":"invalid_grant","error_description":"The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client."}
  Processing by Users::OmniauthCallbacksController#failure as HTML
    Parameters: {"code"=>"1b833bcc09651f98b0424a7afb1e60bd50fdcc765daf7d499bcefb5554457187", "state"=>"c215fd707ecd71c6ad0f6b5e58fa0d2da7210d86946d41e3"}
  Redirected to http://localhost:5000/
  Completed 302 Found in 0ms (ActiveRecord: 0.0ms)

Поэтому добавление этого метода в стратегию можно рассматривать как альтернативное решение.

Спасибо.

person Jignesh Gohel    schedule 22.08.2017