2012-05-22 3 views
0

Я хочу отправить запрос REST для создания проблем в jira из моего приложения java. Так что у меня нет проблем с отправкой запроса, и проблема возникает отлично, пока я создаю проблему через браузер (потому что если я не ошибаюсь, JIRA использует файлы cookie для авторизации) Может кто-нибудь дать мне совет, как реализовать авторизацию OAuth jira в Java ? Я никогда не делал этого, прежде чем я думаю, что это не сложно, но я не знаю, что мне нужно для начала. Я нахожу это OAuth example и this Документация запроса REST для JIRA. Можете ли вы посоветовать мне какие-либо документы о OAuth или какие-либо примеры с авторизованием java.Аутентификация OAuth в jira с помощью Java

Спасибо в продвижении.

+1

Я предполагаю, что вы были уже здесь, но вы не можете получить намного лучше, чем [официальный сайт] (http://oauth.net/) для документации о том, как она работает. – kentcdodds

+0

спасибо, я прочитал его сейчас) –

+0

Можете ли вы высказать свое мнение как ответ? –

ответ

1

Я предполагаю, что вы уже были здесь, но вы не можете получить намного лучше, чем official website для документации о том, как это работает.

(перенесенный из моего комментария по запросу)

2

Вот мой ответ на тот же вопрос в форуме Atlassian:

Это очень Hacky, но она совместима с JiraRestClientFactory. Сначала следуйте за JIRA REST API Tutorial, чтобы получить токен доступа. Прочтите их исходный код, чтобы точно понимать, что они делают, поскольку мой код основан на их коде. В их коде используется библиотека net.oauth. Поскольку эта библиотека не находится под центральным хранилищем Maven, вам нужно добавить его в хранилище в файл Maven:

<repository> 
     <id>oauth</id> 
     <url>http://oauth.googlecode.com/svn/code/maven/</url> 
    </repository> 
    ... 

    <dependency> 
     <groupId>net.oauth.core</groupId> 
     <artifactId>oauth</artifactId> 
     <version>20100527</version> 
    </dependency> 

    <dependency> 
     <groupId>net.oauth.core</groupId> 
     <artifactId>oauth-consumer</artifactId> 
     <version>20100527</version> 
    </dependency> 

    <dependency> 
     <groupId>net.oauth.core</groupId> 
     <artifactId>oauth-httpclient4</artifactId> 
     <version>20090913</version> 
    </dependency> 

Теперь мы должны объединить, что учебник сделал, чтобы сделать проверку подлинности запросов с новым 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.<Map.Entry<?, ?>>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<String, String> 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";} 
+1

Не могли бы вы объяснить, как вы сгенерировали 'privatekey', что вы упомянули здесь. Я использовал openssl для его создания. Но это не дает мне правильный результат. – DivyaMenon

+0

есть ли способ добавить ссылку приложения автоматически с помощью плагина? – Vivek

+0

@DivyaMenon Я нашел «privateKey» здесь: https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials/jira-rest-api-example-oauth -аутентификация. Это длинная строка, начинающаяся с 'MIIBIj ...'. – Abbas

Смежные вопросы