Как сделать правильный запрос 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