java - LinkedIn 集成 - 建立 requestToken

标签 java integration linkedin-api httpconnection

我正在开发(目前正在尝试)将与 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/

相关文章:

java - 构建自定义 Java 库

java - 对具有关系的对象实现save() Action ?

mysql - 集成两个 Rails 应用程序数据库

css - Bootstrap 集成到 Magento 电子商务。如何?

android - 在我自己的应用程序中集成另一个 android 应用程序

linkedin - 我缺少什么 LinkedIn API 权限来获取组织目标名称?

java - 动态地将数据填充到微调器中

java - Spring安全不允许资源,登录后浏览器只显示一个css文件?

linkedin-api - "Client is disabled"错误消息的含义是什么?

php - 领英公司动态