401 несанкционированная ошибка в oauth с Jira 2L0 в Rails с использованием oauth-плагина

Я пытаюсь подключить потребителя OAuth, используя двухэтапную аутентификацию. У меня есть два вопроса:

1) можно ли использовать Oauth с настраиваемым плагином REST (в отличие от встроенного API)

2) в качестве теста встроенного REST API я пытаюсь сделать следующее и получаю:

<Net::HTTPUnauthorized 401 Unauthorized readbody=true>
{"errorMessages":["You do not have the permission to see the specified issue","Login Required"],"errors":{}}

Вот метод проверки:

jira_url = "http://localhost:2990/jira"

consumer_key = "hardcoded-consumer"
consumer_secret = OpenSSL::PKey::RSA.new(IO.read(File.dirname(__FILE__) + "/../rsakey.pem"))

@consumer ||= OAuth::Consumer.new(consumer_key, consumer_secret, {
    :site => 'http://localhost:2990',
    :context_path       => '/jira',
    :signature_method   => 'RSA-SHA1',
    :auth_type          => :oauth,
    :scheme => :header,
    :oauth_callback => false,
    :ssl_verify_mode    => OpenSSL::SSL::VERIFY_PEER,
    :use_ssl            => true,
    :http_method => :post,
    :request_token_path => jira_url + '/plugins/servlet/oauth/request-token',
    :access_token_path  => jira_url + '/plugins/servlet/oauth/access-token',
    :authorize_path     => jira_url + '/plugins/servlet/oauth/authorize'
})

testurl = jira_url + "/rest/api/latest/issue/SPI-1"

puts "1 #################################### first method"
req = @consumer.create_signed_request(:get, testurl, nil)
res = Net::HTTP.start('localhost', '2990') { |http| http.request(req) }
puts res.inspect
puts res.body

puts "2 #################################### second method"
@acc_tok = OAuth::AccessToken.new @consumer
resp = @acc_tok.get(testurl)
puts @acc_tok.inspect
puts resp.inspect
puts resp.body

Оба метода выдают одну и ту же ошибку.

Может ли кто-нибудь сказать мне, что я делаю неправильно?


person jbeck    schedule 27.11.2012    source источник
comment
Вы разобрались с проблемой, я столкнулся с той же проблемой.   -  person Naveen Kumar    schedule 21.04.2014
comment
правильно ли указано местоположение rsakey.pem?   -  person Dave    schedule 25.04.2014


Ответы (1)


Ответ 1. OAuth — это платформа авторизации, а REST — это клиент-серверный кэшируемый протокол связи без сохранения состояния. Так что да, вы можете использовать OAuth для аутентификации с помощью своего собственного плагина REST.

Ответ 2. Вы можете попробовать без SSL или использовать :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE, если это работает, тогда проблема в вашем SSL-соединении. В качестве альтернативы вы можете попробовать обычную аутентификацию:

{
     :username => "*Your JIRA username*",
     :password => "*Your JIRA password*",
     :site     => 'http://localhost:2990/',
     :context_path => 'jira',
     :auth_type => :basic,
     :use_ssl => true,
     :signature_method   => 'RSA-SHA1',
     :ssl_verify_mode    => OpenSSL::SSL::VERIFY_NONE
}

Я нашел эту жемчужину очень полезной.

person Amit Singh    schedule 17.12.2014