0

我正在运行一个基于 AngularJS 构建的测试站点,并且在尝试让 Forge OAuth 运行时遇到问题。这是我试图提出的要求......

$http({
   method: 'POST',
   url: 'https://developer.api.autodesk.com/authentication/v1/authenticate',
   data: 'client_id=' + token.clientId + '&client_secret=' + token.secret + '&grant_type:client_credentials&scope=data:read',
   headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
   withCredentials: false
}).then(function (r) {
   authToken = r.access_token;
   toastr.success('success');
}, function (e) {
   toastr.error('fail');
});

它出错了:

XMLHttpRequest cannot load https://developer.api.autodesk.com/authentication/v1/authenticate. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 500.

我知道这是一个与 CORS 相关的问题,我不是这方面的专家。这不能使用 $http.post() 吗?如果没有,我应该如何使用 Angular 进行身份验证?

4

1 回答 1

2

我假设您从角度客户端调用您的 $http 。无论调用成功与否,我需要在这里提一下,在代码中共享您的客户端 ID 和密码是一个坏主意。任何人都可以读取 javascript 代码并窃取您的密钥——一旦他们这样做,他们就可以使用它们来请求访问令牌并使用您的帐户来处理文件——而您将支付账单。这适用于任何 WEB 服务 - 免费或付费 - 例如 Twitter、谷歌地图等......永远不要在客户端泄露您的密钥。请改用服务器上的端点。

现在,我认为您的数据字符串格式存在错误:

data: 'client_id=' + token.clientId + '&client_secret=' + token.secret + '&grant_type:client_credentials&scope=data:read',

应该是

data: 'client_id=' + token.clientId + '&client_secret=' + token.secret + '&grant_type=client_credentials&scope=data:read',

授予类型:=> 授予类型=

对于 CORS 问题,这是因为您正在从浏览器调用此端点的 http 请求。注意浏览器发送的 Origin 标头,您会发现它是特定的。一旦您获得授权标头,CORS 问题就会消失。

希望有帮助,

于 2016-10-05T16:15:55.877 回答