GAE/J + Slim3でScribeを使ってLinked inにOAuthする

GAE/J + Slim3でLinked in にOAuth認証してみました。

参考URL
http://developer.linkedin.com/message/4568#4568

  • Step1: 必要なライブラリをダウンロードしてwar/WEB-INF/lib以下に配置(+開発用にパスを通す)
  • Step2: ここからアプリケーションを登録します。
    • Add New Applicationをクリックして、必要事項を記入。
    • API KeyとSecret Keyが発行されるので、記録しておきます。
  • Step3: properitesファイルを作ります。
    • 今回はlnkedin.propertiesと言う名前で作成して、war/authに置きました。
    • Step2で取得した, を指定
    • 認証後に戻ってくるを指定
consumer.key=<API Key>
consumer.secret=<Secret Key>
request.token.verb=POST
request.token.url=https://www.linkedin.com/uas/oauth/requestToken
access.token.verb=POST
access.token.url=https://www.linkedin.com/uas/oauth/accessToken
callback.url=<Callback URL>
scribe.equalizer=org.scribe.eq.LinkedInEqualizer
  • Step4: コントローラを作成します。
    • Callback URLではこのコントローラが呼び出されるようなパスを指定します。
package niwaruka.controller.niwaruka.login.auth;

import java.io.FileInputStream;
import java.util.Properties;

import org.scribe.http.Request;
import org.scribe.http.Request.Verb;
import org.scribe.http.Response;
import org.scribe.oauth.Scribe;
import org.scribe.oauth.Token;
import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;

public class LinkedinController extends Controller {

    @Override
    public Navigation run() throws Exception {

        Properties props = new Properties();
        FileInputStream fis = new FileInputStream("auth/linkedin.properties");
        props.load(fis);
        Scribe scribe = new Scribe(props);

        String verifier = requestScope("oauth_verifier");

        if (verifier == null) {
            Token requestToken = scribe.getRequestToken();
            String path =
                "https://www.linkedin.com/uas/oauth/authorize?oauth_token="
                    + requestToken.getToken();
            sessionScope("secret", requestToken.getSecret());
            return redirect(path);
        } else {
            String token = requestScope("oauth_token");
            String secret = sessionScope("secret");
            Token requestToken = new Token(token, secret);
            Token accessToken = scribe.getAccessToken(requestToken, verifier);

            // Get Data from linked in
            Request request =
                new Request(
                    Verb.GET,
                    "http://www.linkedin.com/v1/people/~/network?count=50");

            scribe.signRequest(request, accessToken);
            Response response = request.send();
            // Do something with the response.

            return null;
        }
    }
}

できたー!!