无效的签名Open Bank Project Oauth1.0a

时间:2016-05-26 08:28:14

标签: react-native oauth-1.0a

我正在使用Open Bank Project开发React-Native应用程序而我无法使用建议的SDK,甚至不是nodeJS,因为Oauth1.0在RN中不可用。 我在访问令牌请求' / oauth / token'上遇到了Bad Signature错误。在通过' / oauth / initiate'和' / oauth / authorize'没有任何问题。

在访问受保护资源之前,如文档here中所指定的,我们需要通过POST请求访问令牌,这会给我一个错误的签名答案。

以下是我的请求代码:

getAccessToken(verifier){
let request = {
  url:    'https://api.openbankproject.com/oauth/token',
  method: 'POST',
  data: {
    oauth_verifier: verifier,
    oauth_token: this.auth.oauth_token,
    oauth_token_secret: this.auth.oauth_token_secret
  }
}
return fetch(this.url_login, {
  method:     request.method, //POST
  form:       request.data,
  headers:    this.oauth.toHeader(this.oauth.authorize(request))
})
.then((res) => {return res.text()})
.then((txt) => {
  console.log('setUID', txt, this.url_login, {
    method:     request.method,
    form:       request.data,
    headers:    this.oauth.toHeader(this.oauth.authorize(request))
  })
})

以下是已签名的请求:

对象{方法:" POST",形式:对象,标题:对象} 形成: 组oauth_token:" ..." oauth_token_secret:" ..." oauth_verifier:" 71531"

标头: 授权: " OAuth oauth_consumer_key =" ...",oauth_nonce =" 3UlQ5dx958tibf6lSg0RUGPQFZeV7b8V",oauth_signature =" weyE1lFkoIjAErYLKdSi9SDlCZsNBi7%2BuAkLV2PWePo%3D",oauth_signature_method =&#34 ; HMAC-SHA256",oauth_timestamp =" 1464248944",oauth_token =" ...",oauth_token_secret =" ...",oauth_verifier =& #34; 71531",oauth_version =" 1.0""

我已尝试使用和不使用Oauth_token_secret,同时将oauth_verifier从正文移动到查询但具有相同的错误签名结果。

有什么想法吗? THX

1 个答案:

答案 0 :(得分:0)

您可以使用oauth模块https://github.com/ciaranj/node-oauth

   var oauth=require('oauth');         
   var consumer = new oauth.OAuth(
     "https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token", 
_twitterConsumerKey, _twitterConsumerSecret, "1.0A", "http://127.0.0.1:8080/sessions/callback", "HMAC-SHA1");

然后生成这样的签名:

    var parameters = consumer._prepareParameters("user_access_token", "user_access_token_secret", "http_method", "request_url");
    var headers = consumer._buildAuthorizationHeaders(parameters);

parameters数组包含签名,如果需要,您也可以构建授权头。希望它有所帮助:)