通过请求从代码中获取 Dropbox OAuth 令牌.js失败;等效卷曲工作
Get Dropbox OAuth Token from Code via request.js Fails; Equivalent curl Works
我正在尝试根据 http api 文档将我的 Dropbox oauth 代码换成令牌。
当我这样使用 curl 执行命令时:
curl https://api.dropbox.com/1/oauth2/token '
-d code=<authorization code> '
-d grant_type=authorization_code '
-u <app key>:<app secret>
一切正常,我被归还了我的持有者令牌。不幸的是,什么似乎是用 node 编写的等效代码.js与请求模块失败。
var request = require("request");
var config = require("./config.json");
request({
url: "https://api.dropboxapi.com/1/oauth2/token",
method: "POST",
auth: {
user: config.client_id,
pass: config.client_secret
},
json: {
code: config.code,
grant_type: "authorization_code"
}
}, function(err, resp, body) {
if (err) throw err;
console.log(body);
});
原木:
{ error_description: 'missing required field "grant_type"',
error: 'invalid_request' }
文档假设如果发生 400 错误(这是),我有:
输入参数错误。错误消息应指示哪一个以及原因。
虽然从上面的代码中可以看出,grant_type
正在指定。
值得注意的是,文档提供了第二个身份验证选项,尽管这也失败了,尽管有不同的消息:
说明(精简)
对/oauth2/token 的调用需要使用应用的密钥和机密进行身份验证。这些可以作为 POST 参数传递(请参阅下面的参数),也可以通过 HTTP 基本身份验证传递。如果使用基本身份验证,则应提供应用密钥作为用户名,应用机密应作为密码提供。
参数
code
字符串 通过将用户定向到/oauth2/authorize?response_type=code 获取的代码。grant_type
字符串 授权类型,必须authorization_code
。client_id
字符串 如果在 POST 参数中传递凭据,则此参数应存在,并且应该是应用的密钥(可在应用控制台中找到)。client_secret
字符串 如果在 POST 参数中传递凭据,则此参数应存在,并且应该是应用的机密。redirect_uri
字符串仅用于验证它是否与原始/oauth2/authorize 匹配,不用于再次重定向。
我对备用身份验证过程的尝试:
var request = require("request");
var config = require("./config.json");
request({
url: "https://api.dropboxapi.com/1/oauth2/token",
method: "POST",
json: {
code: config.code,
grant_type: "authorization_code",
client_id: config.client_id,
client_secret: config.client_secret
}
}, function(err, resp, body) {
if (err) throw err;
console.log(body);
});
原木:
{ error_description: 'No auth function available for given request',
error: 'invalid_request' }
如果 Dropbox 对我的两个请求尝试中的任何一个的完整响应会有所帮助,我将其发布在 pastebin 上。
我没有包括redirect_uri
,因为我没有将其用作代码的一部分流。根据文档,这是允许的。无论如何,我没有任何问题在成功的curl
命令中省略它时。
考虑到我的 API 调用在通过 curl 发送时成功,我显然正在做我的 js 请求有问题。我该怎么做才能获得持有者令牌 I期望?
看起来在
curl
命令中,您正在发送表单编码的 POST 请求(这是 OAuth 使用的),但在 Node.js 代码中,您正在发送 JSON 编码的请求。
尝试form: { ... }
而不是json: { ... }
。
相关文章:
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- 使用Office.js在Excel中将20000多个单元格写入表失败
- scrypt.js失败,N大于2^14
- 解析JS SDK登录到Node.JS中运行的解析服务器=失败
- JS:执行'失败;getComputedStyle'在'窗口':参数的类型不是'
- 使用Q节点模块时,Bluemix node.js应用程序部署失败
- fs.readFileSync()在express js应用程序中失败
- CSS和JS在升级到Drupal站点时失败
- 在 Firefox 中加载带有 require.js 的文本文件失败:“AccessControlException”
- 使用节点确定成功/失败.js函数 async.retry
- 使用 HAML 的复杂 ERB 替换在 JS 中失败
- JS中的条件运算符-失败的语法错误
- 测试Ember.JS应用程序失败,返回ReferenceError:未定义Ember
- zombie.js-xhr-json总是失败
- Knockout.js多个外部模板&多VM切换失败
- js角度按钮保持循环失败
- blueimp Gallery JS初始化失败
- 用C#在Win 8.1 Chakra中执行JS的一个失败的最小例子
- Jasmine规格与Velocity.js动画失败$.Velocity.mock=true
- 1.js:23未捕获类型错误:执行'失败;appendChild'在'节点':参数1不是