使用Java在jira中进行OAuth身份validation

我想从我的java应用程序发送REST请求以在jira中创建问题。 所以我没有遇到发送请求的问题,并且问题在我通过浏览器创建问题时完美创建(因为如果我不是错误JIRA使用cookie来自动化)任何人都可以给我建议如何在Java中实现OAuth jira授权? 我之前从未这样做过,我觉得这并不难,但我不知道我需要从什么开始。 我找到了这个OAuth示例和JIRA的REST请求文档。 你能告诉我任何有关OAuth的文档或任何有关java autorisation的例子吗?

提前致谢。

我假设你已经来过这里了,但你不能比官方网站上的文件更好。

(根据要求移出我的评论)

以下是我在Atlassian论坛上对同一问题的回答:

它非常hacky但它​​与JiraRestClientFactory兼容。 首先按照JIRA REST API教程获取访问令牌。 阅读他们的源代码以了解他们的确切行为,因为我的代码基于他们的代码。 他们的代码使用net.oauth库。 由于此库不在中央maven存储库下,因此需要将其存储库添加到maven文件中:

   oauth http://oauth.googlecode.com/svn/code/maven/  ...  net.oauth.core oauth 20100527   net.oauth.core oauth-consumer 20100527   net.oauth.core oauth-httpclient4 20090913  

现在,我们需要将教程所做的工作与新的AuthenticationHandler相结合 。

 @Test public void test() throws Exception { final JiraRestClientFactory factory = new AsynchronousJiraRestClientFactory(); final URI jiraServerUri = new URI("https://your.jira.instance"); JiraRestClient restClient = null; // restClient = factory.createWithBasicHttpAuthentication(jiraServerUri, "user", "pass"); // old way of doing it restClient = factory.create(jiraServerUri, new AuthenticationHandler() { @Override public void configure(Request request) { try { OAuthAccessor accessor = getAccessor(); accessor.accessToken = access_token; OAuthMessage request2 = accessor.newRequestMessage(null, request.getUri().toString(), Collections.>emptySet(), request.getEntityStream()); Object accepted = accessor.consumer.getProperty(OAuthConsumer.ACCEPT_ENCODING); if (accepted != null) { request2.getHeaders().add(new OAuth.Parameter(HttpMessage.ACCEPT_ENCODING, accepted.toString())); } Object ps = accessor.consumer.getProperty(OAuthClient.PARAMETER_STYLE); ParameterStyle style = (ps == null) ? ParameterStyle.BODY : Enum.valueOf(ParameterStyle.class, ps.toString()); HttpMessage httpRequest = HttpMessage.newRequest(request2, style); for ( Entry ap : httpRequest.headers) request.setHeader(ap.getKey(), ap.getValue()); request.setUri( httpRequest.url.toURI() ); } catch (Exception e) { e.printStackTrace(); } } }); final int buildNumber = restClient.getMetadataClient().getServerInfo().claim().getBuildNumber(); assertTrue(buildNumber > 0); } private final OAuthAccessor getAccessor() { if (accessor == null) { OAuthServiceProvider serviceProvider = new OAuthServiceProvider(getRequestTokenUrl(), getAuthorizeUrl(), getAccessTokenUrl()); OAuthConsumer consumer = new OAuthConsumer(callback, consumerKey, null, serviceProvider); consumer.setProperty(RSA_SHA1.PRIVATE_KEY, privateKey); consumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.RSA_SHA1); accessor = new OAuthAccessor(consumer); } return accessor; } private String getAccessTokenUrl() { return baseUrl + SERVLET_BASE_URL + "/oauth/access-token"; } private String getRequestTokenUrl() { return baseUrl + SERVLET_BASE_URL + "/oauth/request-token"; } public String getAuthorizeUrlForToken(String token) { return getAuthorizeUrl() + "?oauth_token=" + token; } private String getAuthorizeUrl() {return baseUrl + SERVLET_BASE_URL + "/oauth/authorize";}