0

我正在尝试使用 securesocial 通过 OAuth1 对 Linkedin 进行身份验证并获取已连接用户的连接列表。

身份验证工作正常,但在用户连接后调用任何请求,都会返回 401 响应。我可能做错了,但我没有看到潜在的问题。

这是添加到securesocial 代码中提供的Java Demo 应用程序的简单方法:

@SecureSocial.SecuredAction ( authorization = WithProvider.class, params = {"linkedin"})
public static Result linkedinConnections(){
    Identity user = (Identity) ctx().args.get(SecureSocial.USER_KEY);        
    OAuth1Info oauthInfo = user.oAuth1Info().get();

    String url = "http://api.linkedin.com/v1/people/~/connections:(headline,first-name,last)?format=json";
    String consumerKey = SecureSocial.serviceInfoFor(user).key().key();
    String consumerSecret = SecureSocial.serviceInfoFor(user).key().secret();

    return async(
            WS.url(url)
            .sign(
                new OAuthCalculator(
                    new OAuth.ConsumerKey(consumerKey, consumerSecret), 
                    new OAuth.RequestToken(oauthInfo.token().toString(), oauthInfo.secret().toString())
                )
            )
            .get()
            .map(new Function<WS.Response, Result>() {
                public Result apply(WS.Response response) {
                    System.out.println(response);
                    return ok(response.getStatusText());
                }
            })
        );
}

任何想法都会有所帮助

问候, 纳比尔

4

1 回答 1

0

我没有尝试将 SecureSocial 与 LinkedIn 一起使用,但鉴于此

  • SecureSocial 的身份验证有效
  • 您想列出 LinkedIn 用户的连接
  • 您自己的方法总是得到 401 错误(未经授权)

很明显,您正在混合两种不同的访问级别。SecureSocial 执行的身份验证只需要来自 LinkedIn 的基本信息,例如姓名或邮件地址。然后使用相同的身份验证令牌,您想访问 LinkedIn 用户的高级信息(其连接)。这当然被 LinkedIn 拒绝(未经授权),因为用户只允许您访问他的基本个人资料,而不是他的联系人/连接。

如果您希望获得更多权限以列出用户的连接,我认为您必须将范围信息添加到 SecureSocial 发送的 OAuth 身份验证请求中。这可能意味着您必须编辑模块的源文件以添加范围信息。

有关 LinkedIn 范围和权限,请参阅https://developer.linkedin.com/documents/authentication。有关 LinkedIn SecureSocial 代码,请参阅https://github.com/jaliss/securesocial/blob/master/module-code/app/securesocial/core/providers/LinkedInProvider.scala

希望这可以帮助。

于 2013-05-02T07:45:59.663 回答