【问题标题】:Issue exchanging LInkedIn javascript token to rest oauth token问题交换 LInkedIn javascript 令牌以休息 oauth 令牌
【发布时间】:2015-08-01 20:59:45
【问题描述】:

我正在使用位于 https://developer-programs.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens 的文章将我的 Javascript 访问令牌交换为 REST OAuth 令牌。

按照此处的说明进行操作后,无论我做什么,我都只会收到 400 Bad Request 响应。

我用于 Facebook 并希望通过 LinkedIn 重新创建的流程是;前端向 LinkedIn 进行身份验证并将访问令牌传递给我的 API,然后 API 获取所有必要的用户信息并将我自己的不记名令牌传递回客户端,等等。

不幸的是,LinkedIn 不能很好地处理这个问题,我需要将我的令牌从其 Javascript 令牌转换为 OAuth 令牌。

我将 LinkedIn 给我的 cookie 传递给我的 API,它看起来像下面这样(其中 OAuthBase 是 http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs

access_token: "oxmKI9aU4RCfksdegZ3obZGHK-vo6Q4-4FSQk"
member_id: "AmjWCF7ExN"
signature: "t8KEbLjJ+r6uM42tUwfJm5yWp70="
signature_method: "HMAC-SHA1"
signature_order: ["access_token","member_id"]
signature_version: "1"

然后我尝试拨打https://api.linkedin.com/uas/oauth/accessToken 进行实际交流。我的代码是:

public async Task<IHttpActionResult> ConvertLinkedInToken(LinkedInCovertTokenObject val)
    {
        string normalizeduri;
        string normalizedparams;            

        OAuthBase o = new OAuthBase();
        string signature = o.GenerateSignature(new Uri("https://api.linkedin.com/uas/oauth/accessToken"), Startup.linkedInAuthOptions.ClientId, Startup.linkedInAuthOptions.ClientSecret, val.access_token, null, "POST", o.GenerateTimeStamp(), o.GenerateNonce(), out normalizeduri, out normalizedparams);

        var client = new HttpClient();
        var uri = new Uri("https://api.linkedin.com/uas/oauth/accessToken?" +
            "oauth_consumer_key=" + Startup.linkedInAuthOptions.ClientId +
            "&xoauth_oauth2_access_token=" + val.access_token +
            "&signature_method=HMAC-SHA1" +
            "&signature=" + signature
        );

        var response = await client.GetAsync(uri);

        return Ok();
    }

无论我怎么玩,我从 LinkedIn 得到的都是 400 Bad Request,没有任何其他有用的信息。

1) 如何在我的 c# api 中将 LinkedIn JS 令牌转换为 Rest OAuth 令牌

【问题讨论】:

    标签: oauth linkedin


    【解决方案1】:

    我就是这样实现的:

    在前端:

    IN.User.authorize(function(){
      // here you can find oauth token
      var oauth_token = IN.ENV.auth.oauth_token;
      // send this token to your API endpoint
    });
    

    在您的 API(curl 示例)上,当然将 OAUTH_TOKEN 替换为在前端收到的令牌。

    curl -X GET \
      'https://api.linkedin.com/v1/people/~:
    (id,firstName,lastName,siteStandardProfileRequest,picture-url,email-
    address)?format=json' \
      -H 'oauth_token: OAUTH_TOKEN'
    

    【讨论】:

    • 这是否记录在任何地方?它解决了我的问题,但我找不到任何关于如何使用oauth_token 而不是access_token 的文档。
    【解决方案2】:

    您正在查看来自 LinkedIn 的旧文档。从 5 月 12 日开始,LinkedIn 开始对其 API 进行新的更改,其中包括身份验证。据我所知,LinkedIn 不再使用 OAuth,因此您需要 OAuth2.0 进行身份验证。您应该查看此链接以获取更多信息: https://developer.linkedin.com/docs/signin-with-linkedin

    【讨论】:

    • 谢谢@Indraneel 我认为你是对的。真的很遗憾,因为他们的 Javascript API 提供的令牌非常易于使用......但他们的 REST API 无法使用
    猜你喜欢
    • 2015-04-25
    • 2014-05-10
    • 2016-01-19
    • 1970-01-01
    • 2014-08-19
    • 2019-03-16
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多