Я пытаюсь реализовать OpenId Connect для QuickBooks, так как они устарели в 2019 году OAuth1.
В документации здесь я сначала должен подготовить запрос авторизации для перенаправления пользователя на сервер Intuit OAUth 2.0.
Для обработки всего процесса я использую гем omniauth стратегии omniauth-quickbooks-oauth2 . Вот настройка omniauth:
Rails.application.config.middleware.use OmniAuth::Builder do
# Open ID Connect
provider(
:quickbooks_oauth2,
ENV['INTUIT_CLIENT_ID'],
ENV['INTUIT_CLIENT_SECRET'],
scope: 'com.intuit.quickbooks.accounting openid profile email phone address',
sandbox: Rails.env.development?,
)
end
Генерирует следующий запрос:
https://appcenter.intuit.com/connect/oauth2?client_id=MYCLIENTID&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fquickbooks_oauth2%2Fcallback&response_type=code&scope=com.intuit.quickbooks.accounting+openid+profile+email+phone+address&state=71f636c1097f8d5bf07a66df5ca64ec43800ea90f6bcedca
Как только пользователь предоставляет доступ, перенаправляет Intuit на мой URL перенаправления, и после аутентификации пользователя я получаю код авторизации из параметров для запроса токенов.
Для этого я использую самоцвет oauth2
oauth_params = {
:site => "https://appcenter.intuit.com/connect/oauth2",
:authorize_url => "https://appcenter.intuit.com/connect/oauth2",
:token_url => "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer"
}
client = OAuth2::Client.new(ENV['INTUIT_CLIENT_ID'], ENV['INTUIT_CLIENT_SECRET'], oauth_params)
client.auth_code.get_token(authorization_code,
:redirect_uri => 'http://localhost:3000/auth/quickbooks_oauth2/callback',
:grant_type => "authorization_code")
Затем я получаю сообщение об ошибке:
OAuth2::Error: invalid_grant:
{"error":"invalid_grant"}
Я проверил мои обратные вызовы на портале для разработчиков Intuit:
http://localhost:3000/auth/quickbooks_oauth2/callback
Когда я пытаюсь получить код для получения токенов из кода авторизации, полученного на Intuit OAUth2 Playground, это работает!
Это заставляет меня поверить, что проблема может быть в реализации Omniauth, но я застрял!