Как сделать правильный запрос Oauth2 в Rails?

Я использую Ruby on Rails для получения токена с помощью приложения Oauth2 for Clio. Итак, я установил следующий гем:

gem 'oauth2'

И это мой код:

client = OAuth2::Client.new(CLIENT_KEY_CLIO, CLIENT_SECRET_CLIO, site: SITE)
token = client.auth_code.get_token(code, :redirect_uri => 'http://127.0.0.1/approval')
return token

Где переменная code отправлено веб-интерфейсом. И это код, который приложение Clio отправляет, когда пользователь входит в свою учетную запись Clio. Но URL redirect_uri не существует. Однако я создал его, и единственное, что он делает, это получает параметр кода и возвращает его.

Тем не менее, это не работает. В соответствии с документацией я могу поставить URL по умолчанию, который https://app.clio.com/oauth/approval но это тоже не работает. У меня всегда есть эта ошибка:

{
  "error": "invalid_grant",
  "error_description": "The provided access grant is invalid, expired, or revoked (e.g. invalid assertion, expired authorization token, bad end-user password credentials, or mismatching authorization code and redirection URI)."
}

Я помню, что эта ошибка произошла раньше. Но это было решено, когда значение redirect_uri было изменено.

Что не так с redirect_uri? Может ли кто-нибудь предоставить мне пример запросов Oauth2?

3 ответа

В redirect_uri Мне нужен URL, который генерирует code переменная. Так что если http://127.0.0.1/approval существует и доступен через интернет, но не генерирует код, поэтому он не работает. Но если я поставлю правильный URL, который генерирует код, все это работает.

client = OAuth2::Client.new(CLIENT_KEY_CLIO, CLIENT_SECRET_CLIO, site: SITE)
token = client.auth_code.get_token(code, :redirect_uri => 'http://address_generate_code_from_frontend')
return token

Эта ошибка говорит о сбое инициализации вашего клиента. Я имею в виду это: https://github.com/oauth-xx/oauth2/blob/master/lib/oauth2/client.rb#L21. Попробуйте настроить ваш клиент так:

OAuth2::Client.new(CLIENT_KEY_CLIO, CLIENT_SECRET_CLIO, site: SITE, token_url: TOKEN_URL)

# SITE: https://app.clio.com

# TOKEN_URL: /oauth/approval

Дайте мне знать, если это работает.

Кажется, он должен работать, читая другие темы. Добавьте порт к своему URL обратного вызова или к какому порту работает ваше приложение http://127.0.0.1:3000/approval

Другие вопросы по тегам