#ruby-on-rails #http #curl #post #okta
#ruby-on-rails #http #curl #Публикация #okta
Вопрос:
Я пытаюсь получить токен доступа с помощью post-запроса в rails. Я могу записать этот запрос в виде curl, успешно извлекая токен, но когда я пытаюсь преобразовать его в rails, я получаю ошибку 400.
Curl, который работает, заключается в следующем.
curl -v -X POST --url https://subdomain.okta.com/oauth2/v1/token --header 'accept: application/json' --header 'content-type: application/x-www-form-urlencoded' --data 'grant_type=authorization_codeamp;redirect_uri=https://example.com/oauth/obfuscated/callback1amp;code=HxYy0kiN-eG1GuZ3LaYAamp;client_id=somecodeamp;client_secret=anothercode'
Мой метод ruby, который выдает ошибку 400, заключается в следующем:
theURLToGetToken = "https://subdomain.okta.com/oauth2/v1/token";
puts "URL for Token Validation"
puts theURLToGetToken
params = {
'client_id' => AUTH['OKTA_CLIENT_ID'],
'client_secret' => AUTH['OKTA_CLIENT_SECRET'],
'code' => theCode,
"grant_type" => "authorization_code",
'redirect_uri' => "https://example.com/oath/obfuscated/callback1"
}
uri = URI.parse(theURLToGetToken)
request = Net::HTTP::Post.new(uri.path)
request["content_type"] = "application/x-www-form-urlencoded"
request["Accept"] = "application/json"
request.set_form_data(params)
req_options = {
use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
puts "Here's the response"
pp response
Любой совет был бы высоко оценен.
Ответ №1:
Я не уверен, в чем здесь проблема, но то, что я делаю в таких случаях, это:
1) найдите фиктивный веб-сайт, который вы можете использовать для запроса на тестирование (или создайте requestbin)
2) отправьте запрос с помощью curl на свой веб-сайт и сохраните информацию о нем
3) отправьте запрос, используя свой код, на свой веб-сайт
4) сравните результаты
Надеюсь, это поможет.
Ответ №2:
Вам лучше использовать Postman, который можно загрузить отсюда https://www.getpostman.com/pricing
Только после того, как вы правильно подтвердили api с помощью Postman, вам лучше использовать rest-client, faraday или какой-либо другой клиент neat api.