我正在尝试使用两方身份验证来连接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
两种方法输出相同的错误。
谁能告诉我我做错了什么?
答案 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
}
我发现这个宝石非常有用。