我正在尝试执行以下操作:
让用户使用 Linkedin JSAPI 通过 Linkedin 进行身份验证和授权,然后将身份验证详细信息发送到我的服务器,以通过服务器端通信获取用户配置文件。
我设置了 Linkedin 按钮,将授权 cookie 一直传到我的服务器(如此处所述),并且能够验证令牌确实使用我的密钥正确签名。
现在我被困在我应该从 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
,它只是我的linkedin 密钥吗?whereDoIGetThisSignature 怎么样,我如何创建那个?我是否使用与验证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
}
我需要做什么才能完成下一步?