我正在开发(目前正在尝试)将与 LinkedIn 集成的 portlet。
按照有关它的文档: http://developer.linkedin.com/docs/DOC-1008 --> 授权 LinkedIn 成员(member)的第一步是请求 requestToken。该请求通过 HTTP POST 完成。 对于 requestToken 步骤,您的签名字符串中应包含以下组件:
* HTTP Method (POST)
* Request URI (https://api.linkedin.com/uas/oauth/requestToken)
* oauth_callback
* oauth_consumer_key
* oauth_nonce
* oauth_signature_method
* oauth_timestamp
* oauth_version
我已经有了 API(oauth_consumer_key) key ,我需要生成特定的 URL 字符串。 为该 URL 和 HTTP 连接提供下一个 Java 代码:
private void processAuthentication() {
Calendar cal = Calendar.getInstance();
Long ms = cal.getTimeInMillis();
Long timestamp = ms / 1000;
Random r = new Random();
Long nonce = r.nextLong();
String prefixUrl = "https://api.linkedin.com/uas/oauth/requestToken";
String oauthCallback = "oauth_callback=http://localhost/";
String oauthConsumerKey =
"&oauth_consumer_key=my_consumer_key";
String oauthNonce = "&oauth_nonce=" + nonce.toString();
String oauthSignatureMethod = "&oauth_signature_method=HMAC-SHA1";
String oauthTimestamp = "&oauth_timestamp=" + timestamp.toString();
String oauthVersion = "&oauth_version=1.0";
String mainUrl =
oauthCallback + oauthConsumerKey + oauthNonce + oauthSignatureMethod
+ oauthTimestamp + oauthVersion;
try {
prefixUrl =
URLEncoder.encode(prefixUrl, "UTF-8") + "&"
+ URLEncoder.encode(mainUrl, "UTF-8");
URL url = new URL(prefixUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
String msg = connection.getResponseMessage();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
对于那些遇到过这个问题的人来说,接下来的问题是: 应该如何真正查看连接的 URL 字符串以及如何接收响应?
对于 URL,它对您生成的 URL 示例感兴趣。 对于感兴趣的响应,获取它的方法。 据我了解,建立 HTTP 连接后,响应是:
connection.getResponseMessage();
最佳答案
@sergionni 我从 linkedin-developer 找到了您问题的答案
如你所知 授权 Linked-In 成员的第一步是请求 requestToken。此请求通过 HTTP POST 完成。
如果您使用回调,您的基本字符串最终应该看起来像这样:
POST&https%3A%2F%2Fapi.linkedin.com%2Fuas%2Foauth%2FrequestToken &oauth_callback%3Dhttp%253A%252F%252Flocalhost%252Foauth_callback%26o auth_consumer_key%3DABCDEFGHIJKLMNOPQRSTUVWXYZ%26 oauth_nonce%3DoqwgSYFUD87MHmJJDv7bQqOF2EPnVus7Wkqj5duNByU%26 oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1259178158%26 oauth_version%3D1.0
然后,您使用 Consumer_secret 签署此基本字符串,计算签名。在本例中,如果您的 key 是 1234567890,则签名将为 TLQXuUzM7omwDbtXimn6bLDvfF8=。
现在,您可以使用生成的签名以及 oauth_nonce、oauth_callback、oauth_signature_method、oauth_timestamp、oauth_consumer_key 和 oauth_version 并创建 HTTP 授权 header 。对于此请求,该 HTTP header 将如下所示:
Authorization: OAuth oauth_nonce="oqwgSYFUD87MHmJJDv7bQqOF2EPnVus7Wkqj5duNByU", oauth_callback="http%3A%2F%2Flocalhost%2Foauth_callback", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1259178158", oauth_consumer_key="ABCDEFGHIJKLMNOPQRSTUVWXYZ", oauth_signature="TLQXuUzM7omwDbtXimn6bLDvfF8=", oauth_version="1.0"
请注意,HTTP header 是单个 header ,而不是每个组件的 HTTP header 。您可以选择提供realm="http://api.linkedin.com"。
作为对 requestToken 请求的响应,您的 requestToken 将位于“oauth_token”响应字段中,这是我们使用“oauth_callback_confirmed”字段、oauth_token_secret 和 oauth_expires_in 以及其他一些字段确认您的回调的验证值。
(这里是您的答案)回复如下:
oauth_token=94ab03c4-ae2c-45e4-8732-0e6c4899db63 &oauth_token_secret=be6ccb24-bf0a-4ea8-a4b1-0a70508e452b &oauth_callback_confirmed=true&oauth_expires_in=599
关于java - LinkedIn 集成 - 建立 requestToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1907111/