无效签名 Open Bank Project Oauth1.0a

Invalid signature Open Bank Project Oauth1.0a

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

如文档中所述 here 在访问受保护资源之前,我们需要通过 POST 请求获得访问令牌,这给了我 Bad Signature 答案。

这是我的请求代码:

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))
  })
})

这是签名的请求:

Object{方法:"POST",形式:Object,headers:Object} 形式: oauth_token:“……” oauth_token_secret:“……” oauth_verifier:"71531"

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

我试过使用和不使用 Oauth_token_secret,还将 oauth_verifier 从 body 移动到查询,但得到相同的 Bad Signature 结果。

有什么想法吗?谢谢

您可以使用 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);

参数数组包含签名,也可以根据需要建立授权headers。希望对您有所帮助:)