Использование библиотеки JOAuth для публикации вакансий в LinkedIn - PullRequest
0 голосов
/ 14 июня 2011

Это продолжение вопроса, опубликованного мной на Реализация API публикации вакансий в LinkedIn на Java .Я новичок в аутентификации публикации заданий на основе OAuth, а также учусь во время этого процесса.Пожалуйста, ответьте на мои вопросы, если мои вопросы очень простые / наивные.

Я пытаюсь использовать библиотеку JOAuth для аутентификации OAuth и публикации заданий в LinkedIn.Я использую OAuth2 звонки.У меня следующие вопросы с библиотекой JOAuth:

  1. В примере, показанном по ссылке JOAuth, как мне получить маркер запроса для LinkedIn?Я не нашел ни одного заявления для запроса токена запроса.Но я мог видеть consumer.generateRequestAuthorizationUrl(ResponseType.CODE, redirectUri, null, (String[])null));
  2. Если я хочу использовать перенаправление обратного вызова на основе oob , то что мне нужно передать / установить в redirectUri?
  3. Есливсе прошло успешно, и если у меня есть токен доступа, как мне, наконец, отправить / отправить свой XML-файл с данными о работе по адресу http://api.linkedin.com/v1/jobs?

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Ты в замешательстве.LinkedIn использует протокол OAuth 1, а не протоколы OAuth 2.Вот как вы должны выполнить авторизацию Oauth 1 для / с LinkedIn.

Если вы создаете веб-приложение, в папке WEB-INF создайте файл oauth-config.xml и настройте его так:*

<?xml version="1.0" encoding="UTF-8"?>
<oauth-config>
    <!-- LinkedIn OAuth Config -->
        <oauth name="linkedIn" version="1">
                <consumer key="API_KEY" secret="API_SECRET" />
                <provider requestTokenUrl="https://api.linkedin.com/uas/oauth/requestToken" authorizationUrl="https://api.linkedin.com/uas/oauth/authorize" accessTokenUrl="https://api.linkedin.com/uas/oauth/accessToken" />
        </oauth>

        <service path="/authorize_ready" class="com.neurologic.example.LinkedInOAuthService" oauth="linkedIn">
                <success path="/start.htm" />
        </service>
</oauth-config>

LinkedIn использует OAuth версии 1 (отсюда и версию).

Под вашим WEB-INF\web.xml добавьте следующее:

<servlet>
    <description>An OAuth Servlet Controller</description>
    <display-name>OAuthServlet</display-name>
    <servlet-name>OAuthServlet</servlet-name>
    <servlet-class>com.neurologic.oauth.servlet.OAuthServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/oauth-config.xml</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>OAuthServlet</servlet-name>
    <url-pattern>/oauth/*</url-pattern>
</servlet-mapping>

Теперь нам нужно создатьслужба, которая получит авторизованный токен от Linked In.

package com.neurologic.example;

import javax.servlet.http.HttpServletRequest;

import net.oauth.signature.OAuthSignature;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.v1.AccessToken;
import net.oauth.token.v1.RequestToken;

import com.neurologic.oauth.service.impl.OAuth1Service;

/**
 * @author Buhake Sindi
 * @since 31 May 2011
 *
 */
public class LinkedInOAuthService extends OAuth1Service {

    public static final String LINKED_IN_REQUEST_TOKEN_SESSION = "LINKED_IN_REQUEST_TOKEN_SESSION";
    public static final String LINKED_IN_ACCESS_TOKEN_SESSION = "LINKED_IN_ACCESS_TOKEN_SESSION";

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.impl.OAuth1Service#getOAuthSignature()
     */
    @Override
    protected OAuthSignature getOAuthSignature() {
        // TODO Auto-generated method stub
        return new OAuthHmacSha1Signature();
    }

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.impl.OAuth1Service#getRealm()
     */
    @Override
    protected String getRealm() {
        // TODO Auto-generated method stub
        return null;
    }

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.impl.OAuth1Service#getRequestToken(javax.servlet.http.HttpServletRequest)
     */
    @Override
    protected RequestToken getRequestToken(HttpServletRequest request) {
        // TODO Auto-generated method stub
        return (RequestToken) request.getSession().getAttribute(LINKED_IN_REQUEST_TOKEN_SESSION);
    }

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.OAuthService#saveAccessToken(javax.servlet.http.HttpServletRequest, java.lang.Object)
     */
    @Override
    public void saveAccessToken(HttpServletRequest request, AccessToken accessToken) {
        // TODO Auto-generated method stub
        request.getSession().setAttribute(LINKED_IN_ACCESS_TOKEN_SESSION, accessToken);
    }
}

Теперь используйте следующий пример:

package com.neurologic.example;

import net.oauth.consumer.OAuth1Consumer;
import net.oauth.exception.OAuthException;
import net.oauth.provider.OAuth1ServiceProvider;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.v1.AccessToken;
import net.oauth.token.v1.AuthorizedToken;
import net.oauth.token.v1.RequestToken;

/**
 * @author Buhake Sindi
 * @since 14 June 2011
 *
 */
public class LinkedInExample {

    private static final String LINKEDIN_API_URL = "https://api.linkedin.com";
    private static final String API_KEY = "";
    private static final String API_SECRET  = "";
    private static final String CALLBACK_URL = "http://localhost:8080/myapp/oauth/authorize_ready";
    private OAuth1Consumer consumer;


    /**
     * 
     */
    public LinkedInExample() {
        super();
        // TODO Auto-generated constructor stub
        consumer = new OAuth1Consumer(API_KEY, API_SECRET, new OAuth1ServiceProvider(LINKEDIN_API_URL + "/uas/oauth/requestToken", LINKEDIN_API_URL + "/uas/oauth/authorize", LINKEDIN_API_URL + "/uas/oauth/accessToken"));
    }

    public RequestToken requestUnauthorizedRequestToken() throws OAuthException {
        return consumer.requestUnauthorizedToken(null, CALLBACK_URL, null, new OAuthHmacSha1Signature());
    }

    public String getAuthorizationUrl(RequestToken token) throws OAuthException {
        return consumer.createOAuthUserAuthorizationUrl(token, null);
    }

    public AccessToken requestAccessToken(AuthorizedToken authorizedToken, RequestToken token) throws OAuthException {
        return consumer.requestAccessToken(null, authorizedToken, token.getTokenSecret(), new OAuthHmacSha1Signature());
    }


    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            LinkedInExample example = new LinkedInExample();
            RequestToken rt = example.requestUnauthorizedRequestToken();

            //Now that we have request token, let's authorize it....
            String url = example.getAuthorizationUrl(rt);

            //Copy the URL to your browser and make sure that OAuth 1 Servlet is running....
        } catch (OAuthException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

Как видите, CALLBACK_URL настроен насервлет OAuth настроен на JOAuth, поскольку вы получите авторизованный токен.

Вы должны убедиться, что вы вернули токен неавторизованного запроса обратно в службу по методу RequestToken getRequestToken(HttpServletRequest request), так как он понадобится вам дляполучить токен доступа.

Сервисный метод saveAccessToken() вызывается, когда LinkedIn возвращает токен доступа.Вы можете войти, чтобы проверить, возвращен ли токен доступа.

Получив токен доступа, вы можете использовать API-интерфейс LinkedIn и выполнять пост-задания с помощью токена доступа.JOAuth предназначен для получения только токенов доступа и не связывается с другими существующими API.

0 голосов
/ 14 июня 2011

Чтобы уточнить несколько вещей:

1) Это двуногие вызовы OAuth 1.0a.Вам не нужно танцевать OAuth.2) Это не нужно для работы или что-то в этом роде.3) Вы генерируете заголовок авторизации, используя выбранную вами библиотеку OAuth, и отправляете HTTP POST.

Вот краткий старт: http://developer.linkedin.com/docs/DOC-1299

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

Кроме того, для вашего приложения требуется дополнительная авторизация со стороны автора работыв своей учетной записи LinkedIn, чтобы ваш запрос был успешным, а соответствующие данные должны быть в теле XML POST.

Если вы являетесь партнером из белого списка, просим вас проконсультироваться по этому вопросу.с командой API LinkedIn Jobs, и мы организуем дополнительную помощь.

...