2013-03-17 42 views
2

我正在尝试获取Linkedin公司的更新到我的网站。遵循流程https://developer.linkedin.com/documents/authentication并通过注册生成api密钥和密钥。Linkedin api使用java中的oauth调用

根据documentation我可以在步骤a中生成授权码。 对于步骤b生成访问令牌我正在使用OAuth in java

request = OAuthClientRequest.tokenLocation("https://www.linkedin.com/uas/oauth2/accessToken") 
         .setGrantType(GrantType.AUTHORIZATION_CODE) 
         .setCode("****") 
         .setRedirectURI("https://www.example.in") 
         .setClientId("*******") 
         .setClientSecret("******").buildBodyMessage(); 
        OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); 
        GitHubTokenResponse oAuthResponse = oAuthClient.accessToken(request, GitHubTokenResponse.class); 
        String accessToken = oAuthResponse.getAccessToken(); 
        String expiresIn = oAuthResponse.getExpiresIn(); 

但得到错误

OAuthProblemException{description='Missing parameters: access_token', error='invalid_request', uri='null', state='null', scope='null'} 
at org.apache.amber.oauth2.common.exception.OAuthProblemException.error(OAuthProblemException.java:57) 
at org.apache.amber.oauth2.common.utils.OAuthUtils.handleOAuthProblemException(OAuthUtils.java:166) 
at org.apache.amber.oauth2.common.utils.OAuthUtils.handleMissingParameters(OAuthUtils.java:184) 
at org.apache.amber.oauth2.client.validator.OAuthClientValidator.validateRequiredParameters(OAuthClientValidator.java:90) 
at org.apache.amber.oauth2.client.validator.OAuthClientValidator.validateParameters(OAuthClientValidator.java:53) 
at org.apache.amber.oauth2.client.validator.OAuthClientValidator.validate(OAuthClientValidator.java:49) 
at org.apache.amber.oauth2.client.response.OAuthClientResponse.validate(OAuthClientResponse.java:64) 
at org.apache.amber.oauth2.client.response.OAuthClientResponse.init(OAuthClientResponse.java:59) 
at org.apache.amber.oauth2.client.response.OAuthAccessTokenResponse.init(OAuthAccessTokenResponse.java:52) 
at org.apache.amber.oauth2.client.response.OAuthClientResponseFactory.createCustomResponse(OAuthClientResponseFactory.java:60) 
at org.apache.amber.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:105) 

请帮助解决这个问题。预先感谢您的帮助。

回答

2

我发现了这个问题。

看起来在文档中存在问题。道歉。

正确的判罚是

request = OAuthClientRequest.tokenLocation("https://www.linkedin.com/uas/oauth2/accessToken") 
        .setGrantType(ResponseType.CODE.toString()) 
        .setCode("****") 
        .setRedirectURI("https://www.example.in") 
        .setClientId("*******") 
        .setClientSecret("******").buildBodyMessage(); 

心灵ResponseType.CODE.toString()而不是GrantType.AUTHORIZATION_CODE

+0

谢谢安东尼奥,刚刚试过这一个,并得到编译错误类型OAuthClientRequest.TokenRequestBuilder中的方法setGrantType(GrantType)不是 适用于参数(字符串)。我是否需要制作任何周报。 – Bhabani 2013-04-08 05:32:41

+0

oopps道歉。我已经将身份验证位置与令牌一混合了。问题是你可能想使用OAuthJSONAccessTokenResponse.class而不是GitHubTokenResponse.class for Linkedin:OAuthJSONAccessTokenResponse oAuthResponse = oAuthClient.accessToken(request,OAuthJSONAccessTokenResponse.class);我们正在改进我们的API和文档。我意识到这有点令人困惑。 – 2013-04-08 07:28:09

+0

谢谢安东尼奥,终于可以打电话了。 – Bhabani 2013-04-08 08:30:18

1

我建议你通过一些linkedin开发者文档,并签出一个java OAuth library而不是手动执行签名过程。然后你可以问一个具体的问题。

+0

我第二的! – OhadR 2013-03-17 13:23:45