首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图验证时出错:验证签名失败。同时使用``oauth 1.0a‘和nodejs

试图验证时出错:验证签名失败。同时使用``oauth 1.0a‘和nodejs
EN

Stack Overflow用户
提问于 2022-10-16 13:35:38
回答 1查看 27关注 0票数 1

当我尝试用oauth-1.0a和node.js发送post请求时,nodejs中出现了这个奇怪的错误。

请求:

代码语言:javascript
复制
Headers:
Authorization: OAuth <...>
Accept: 'application/xml',
Content-Type: 'application/xml'

Body:
<account>
    <firstName>${first}</firstName>
    <lastName>${last}</lastName>
    <email>${email}</email>
    <urlRedirect>${redirecturl}</urlRedirect>
</account>`

响应:

代码语言:javascript
复制
401
An error occurred while trying to authenticate: Failed to validate signature.

代码:

代码语言:javascript
复制
require('dotenv').config()
const request = require('request')
const OAuth = require('oauth-1.0a')
const crypto = require('crypto')
var first = "real";
var last = "person";
var email = "real@person.com";
var redirecturl = "http://google.com"
const oauth = OAuth({
    version: '1.0a',
    consumer: {
        key: process.env.CONSUMERKEY,
        secret: process.env.CONSUMERSECRET,
    },
    signature_method: 'HMAC-SHA1',
    hash_function(base_string, key) {
        return crypto
            .createHmac('sha1', key)
            .update(base_string)
            .digest('base64')
    },
})
console.log(oauth)
const token = {
    key: process.env.KEY,
    secret: process.env.SECRET,
}
const request_data = {
    url: `https://${process.env.CHURCHCODE}.fellowshiponeapi.com/v1/Accounts`,
    method: 'POST',
    data: `<account>
    <firstName>${first}</firstName>
    <lastName>${last}</lastName>
    <email>${email}</email>
    <urlRedirect>${redirecturl}</urlRedirect>
  </account>`
}
const headers = Object.assign( oauth.toHeader(oauth.authorize(request_data, token)), {
    Accept: 'application/xml',
    'Content-Type': 'application/xml'
});
console.log(headers); 
request(
    {
        url: request_data.url,
        method: request_data.method,
        headers: headers
    },
    function(error, response, body) {
        console.log(response.statusCode)
        console.log(response.statusMessage)
     }
)

为什么会发生此错误?

编辑:我使用的更有用的资源之一是:https://oauth.net/core/1.0/#signing_process,但我仍然找不出这一点。

还应该提到,这个请求确实有效,就像在postman中成功地通过了一样。

EN

回答 1

Stack Overflow用户

发布于 2022-10-16 13:57:09

您通常希望使用此标头在请求中提供令牌:

代码语言:javascript
复制
Authorization: Bearer <token>

代码语言:javascript
复制
Authorization: OAuth <...>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74087548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档