通过查看标题可能是一个简单的问题,但我有一个非常具体的情况。
我正在应用程序中实现社交登录流程。 auth提供商是Facebook,LinkedIn和Twitter。
流程是,客户端(JavaScript代码)通过弹出窗口对用户进行身份验证,一旦用户验证请求,客户端将对后端API服务器进行HTTP POST调用,传递客户端的accessToken
验证用户后获取。
服务器将再次验证accessToken
,然后生成sessionToken
并传递给客户端;客户端现在将在将来的api调用服务器中使用此sessionToken
。
现在Facebook上有JS SDK,我获得了访问令牌。对于LinkedIn也有JS SDK,我有oauth_token
使用
var oauthToken = IN.ENV.auth.oauth_token;
我将此oauthToken
传递给服务器;服务器将向人们的API发出HTTP请求并获取用户数据。请求如下所示
request.get('https://graph.facebook.com/me', {
'auth': {
'bearer': accessToken
}
}, function(error, response, body) {
if(error) {
callback(error);
} else if(response.statusCode < HTTP_RANGE) {
var result = JSON.parse(body);
callback(null, result);
} else {
var err = JSON.parse(body);
callback(err);
}
});
上述内容也适用于linkedin。
现在我的问题如下:
此外,如果我考虑上述流程,它将在公共JS代码上公开twitter客户端ID和客户端密码,这是强烈不推荐的。所以我做了一些研究并从oauth.io开始。使用oauth.io我可以让用户使用基于弹出的机制登录应用程序。代码
// twitter social network login
OAuth.popup('twitter').done(function(result) {
console.log(result);
// call backend api to login
socialNetworkLoginHandler(socialNetwork, result.oauth_token);
}).fail(function (error) {
$log.error('Twitter OAuth Error ' + angular.toJson(error));
});
结果对象包含oauth_token,我将此oauth令牌传递给服务器,并将调用twitter api来验证如下所示的凭据
request.get('https://api.twitter.com/1.1/account/verify_credentials.json', {
'headers': {
'oauth_token': accessToken
}
}, function(error, response, body) {
if(error) {
callback(error);
} else if(response.statusCode < HTTP_RANGE) {
var result = JSON.parse(body);
callback(null, result);
} else {
var err = JSON.parse(body);
callback(err);
}
});
我从twitter api收到错误的身份验证数据错误,错误代码为215.上述内容在LinkedIn中运行正常,但在Twitter上也失败了。如何解决此错误?