我正在尝试执行以下操作:
让用户使用Linkedin JSAPI通过Linkedin进行身份验证和授权,然后获取身份验证详细信息并将其发送到我的服务器以通过服务器端通信获取用户配置文件。
我设置了Linkedin按钮,将授权cookie一直提供给我的服务器(如here所述),并且能够使用我的密钥验证令牌是否确实正确签名。
现在我陷入了我应该从JSAPI获取令牌并将其换成访问令牌的地步。
这是我正在使用的代码,如上所述它使用Spring Social for Linkedin,它不起作用,因为它抛出401 Unauthorized响应:
LinkedInConnectionFactory connectionFactory =
new LinkedInConnectionFactory(myLinkedinId, myLinkedinSecret);
OAuth1Operations oauthOperations = connectionFactory.getOAuthOperations();
AuthorizedRequestToken art = new AuthorizedRequestToken(new OAuthToken(codeIGotFromJSAPI, aSecretKey), whereDoIGetThisSignature);
OAuthToken accessGrant = oauthOperations.exchangeForAccessToken(art, null);
if (accessGrant == null) return null;
Connection<LinkedIn> connection = connectionFactory.createConnection(accessGrant);
if (connection != null) {
LinkedIn linkedin = connection.getApi();
return linkedin.profileOperations().getUserProfile();
}
我真正感到困惑的是AuthorizedRequestToken对象。我认为codeIGotFromJSAPI
部分很简单,它只是access_token,但是aSecretKey
呢,它只是我的密钥密钥吗?怎么样的doDoIGetThisSignature,我该如何创建那个?我是否使用与用于验证linkedin响应相同的哈希方法,并使用我的秘密linkedin密钥对access_token进行哈希处理?在linkedin页面中,它显示:
您需要传递四个值作为查询参数:
- oauth_consumer_key,以表明自己的身份
- xoauth_oauth2_access_token参数,设置为cookie中access_token字段的值。
- signature_method设置为HMAC-SHA1
- 签名,按照OAuth 1.0a规范
中的描述计算 醇>
所以(1)是由我想的连接自动完成的,(2)是我提供的访问令牌,但我该怎么做(3)和(4)?
假设我在Linkedin设置的JSAPI cookie中获得以下数据:
{
"signature_method":"HMAC-SHA1",
"signature_order": ["access_token", "member_id"],
"access_token":"AD2dpVe1tOclAsNYsCri4nOatfstw7ZnMzWP",
"signature":"73f948524c6d1c07b5c554f6fc62d824eac68fee",
"member_id":"vvUNSej47H"
"signature_version": 1
}
我需要做些什么才能完成下一步?
答案 0 :(得分:1)
使用以下过程:
"signature":"..."
转换为&signature=...
"signature_method":"HMAC-SHA1"
转换为&signature_method=HMAC-SHA1
"member_id":"..."
转换为&oauth_customer_key=...
"access_token":"..."
转换为&xoauth_oauth2_access_token=...
?
答案 1 :(得分:0)
Exchange JSAPI Tokens for REST API OAuth Tokens目前不支持Spring forum discussion中描述的LinkedIn JSAPI令牌交换,根据LinkedIn developer forum discussion关于此主题的说法。
但是,如果没有Spring Social,可以使用可用于Java的标准OAuth库来实现解决此任务的实现。您从交换机获得的LinkedIn用户访问令牌可以放入新的AccessGrant
对象中,该对象可用于在用户中创建Spring Social Connection<?>
ConnectionRepository
。
Scribe中发布的代码显示了如何使用{{3}}执行交换。必须发送到LinkedIn的请求是标准OAuth请求,但必须将来自JSAPI令牌对象的access_token
字段作为HTTP查询参数xoauth_oauth2_access_token
发送。您可以使用的member_id
仅供参考,signature
可让您在不查询LinkedIn的情况下验证access_token
和member_id
。