使用客户端和服务器端实现twitter oauth 1.0a流程

时间:2015-02-17 19:13:28

标签: facebook api twitter oauth authorization

通过查看标题可能是一个简单的问题,但我有一个非常具体的情况。

我正在应用程序中实现社交登录流程。 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。

现在我的问题如下:

  1. 如何通过Twitter实现相同的流程?我读了sign in with twitter flow at twitter docs,但我不确定我是否能够实现它,特别是签署请求和解析响应。所以为此,我搜索谷歌,但无法找到任何可以做到这一点的好库。请建议任何好的图书馆。
  2. 此外,如果我考虑上述流程,它将在公共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上也失败了。如何解决此错误?

0 个答案:

没有答案