JavaScript中的Autodesk 2 Legged Authentication,两个不同的错误

问题描述

根据我是GET还是POST,我会遇到两个不同的错误,但是我的Autodesk代表向我保证,使用邮递员(而非javascript)资源确实存在,并且他可以获取身份验证令牌。

如果我这样做:


  var url = "https://developer.api.autodesk.com/authentication/v1/authenticate";
  var options = {
    "method": "GET","headers":{"Content-Type": "application/x-www-form-urlencoded",},"body": {
    "client_id" : "Z---F","client_secret" : "m---8","grant_type": "client_credentials","scope": "data:read"  
    }
  
    }
 ;
 console.log(url);
 console.log("Options:\n"+JSON.stringify(options));
var res = UrlFetchApp.fetch(url,options).getContentText();
Logger.log(res);
}

我明白了

异常:https://developer.api.autodesk.com的请求失败,返回了代码404。服务器被截断>响应:{“ developerMessage”:“所请求的资源不存在。”,“ moreInfo”:> https://forge.autodesk。 com / en / docs / oauth / v2 / developers_guide / error_hand ...(使用MutantHttpExceptions>选项检查完整响应)

如果我愿意

  var url = "https://developer.api.autodesk.com/authentication/v1/authenticate";
  var options = {
    "method": "POST",options).getContentText();
Logger.log(res);
}

我明白了

异常:https://developer.api.autodesk.com的请求失败,返回了代码400。截断的服务器>响应:{“ developerMessage”:“请求中不存在所需的参数client_id,client_secret,grant_type”,“ errorCode” :“ AUTH-008”,“更多信息”:“ h ...(使用MutantHttpExceptions选项检查完整的>响应)

有人想为什么会说不存在的资源呢?这里没有个人信息,因此,无论他是在做我还是在做我,这都不重要。我在该问题上能找到的所有帖子都是在处理此调用的curl版本,而不是处理带有选项包的javascript

解决方法

URL绝对有效(此端点的API reference),因此,我建议调试发出请求的实际代码,例如:

  • 调试UrlFetchApp类(它来自btw吗?)及其fetch方法,确保没有修改您传入的url
  • 如果代码在浏览器中运行,请尝试查看DevTools Network tab并查看请求是否实际发送到https://developer.api.autodesk.com/authentication/v1/authenticate
  • 如果代码在浏览器中运行,请尝试使用内置的Fetch API

此外,我不确定这是否是UrlFetchApp自动处理的事情,但是将请求的内容类型指定为application/x-www-form-urlencoded,然后将JSON对象作为正文传递了看起来不错。如您在documentation中所见,请求正文应更像这样:

client_id=<your client id>&
client_secret=<your client secret>&
grant_type=client_credentials&
scope=data:read

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...