0

これは、 LinkedIn Job Posting API implementation in Java で私が投稿した質問の続きです。私は、ジョブを投稿するこの OAuth ベースの認証は初めてで、このプロセス中にも学習しています。私の質問が非常に基本的/素朴である場合は、ご容赦ください.

OAuth 認証にJOAuthライブラリを使用し、LinkedIn にジョブを投稿しようとしています。OAuth2 呼び出しを使用しています。JOAuth ライブラリについて次の質問があります。

  1. JOAuth リンクに示されている例では、LinkedIn のリクエスト トークンを取得するにはどうすればよいですか? リクエスト トークンをリクエストするためのステートメントが見つかりません。しかし、私は見ることができましたconsumer.generateRequestAuthorizationUrl(ResponseType.CODE, redirectUri, null, (String[])null));
  2. oobベースのコールバック リダイレクトを使用する場合、何を渡す/設定する必要がありredirectUriますか?
  3. すべてが成功し、アクセス トークンを取得した場合、最終的にhttp://api.linkedin.com/v1/jobsでジョブ データ XML を送信/送信するにはどうすればよいですか?
4

2 に答える 2

1

あなたは混乱しています。LinkedIn は、OAuth 2 プロトコルではなく、OAuth 1 プロトコルを使用します。LinkedIn との間で Oauth 1 承認を行う方法は次のとおりです。

Web アプリケーションを作成している場合は、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、承認済みトークンを受け取るため、JOAuth に構成された OAuth サーブレットを指すように設定されています。

アクセストークンを取得するために必要になるため、未承認のリクエストトークンをメソッドのサービスに返すようにするRequestToken getRequestToken(HttpServletRequest request)必要があります。

サービスsaveAccessToken()メソッドは、LinkedIn がアクセス トークンを返すときに呼び出されます。ログに記録して、アクセス トークンが返されるかどうかを確認できます。

アクセス トークンを取得したら、LinkedIn API を使用し、アクセス トークンを使用してジョブを投稿できます。JOAuth は、アクセス トークンのみを取得するように設計されており、存在する他の A​​PI とは通信しません。

于 2011-06-14T08:14:41.077 に答える
0

いくつかのことを明確にするために:

1) これらは 2 つの OAuth 1.0a 呼び出しです。OAuth ダンスを行う必要はありません。2) これらは oob などの必要はありません。3) 選択した OAuth ライブラリを使用して Authorization ヘッダーを生成し、HTTP POST を送信します。

クイック スタートは次のとおりです: http://developer.linkedin.com/docs/DOC-1299

繰り返しますが、これはクローズド プログラムであるため、特別なホワイトリストに登録された一連のパートナーでない限り、上記のすべてを解決しても通話は失敗します。

さらに、リクエストを成功させるには、LinkedIn アカウント内の求人投稿者によるアプリケーションの追加の承認が必要であり、関連データが XML POST 本文にある必要があります。

ホワイトリストに登録されているパートナーである場合は、これに関する質問の量に基づいて、LinkedIn Jobs API チームにフォローアップしてください。追加の支援を手配します.

于 2011-06-14T07:30:14.657 に答える