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以下に配置(+開発用にパスを通す)
- Scribeをダウンロード
- apache-commons-codecをダウンロード
- 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; } } }
できたー!!