2017-06-18 152 views
1

优先级的web-SDK的.login功能包括当使用下面的示例代码的网页返回一个错误请求的脚本:错误请求优先级的Web-SDK的功能的.login

<script 
    src="https://cdn.priority-software.com/upgrades/var/api/v1.5/priorityapp.nocache.js"> 
</script> 
<script> 

    var config = { 
     url: 'https://www.eshbelsaas.com/ui/', 
     ... 
    }; 

    function priorityReady() { 
     login(config).then(
      onsuccess=> 
      { 
       console.log('Your are in!! Enjoy!'); 
      }, 
      reason=> 
      { 
       console.log(reason.message); 
      } 

</script> 

全身体消息如下:

XMLHttpRequest无法加载www.eshbelsaas.com/.../service.svc。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此不允许原产地'null'访问。响应有HTTP状态代码400

同样的行为被展出:

  • 边缘
  • 的JavaScript UWP应用

不过,我能NPM包在node.js中并使用相同的配置设置登录:

var priority = require('priority-web-sdk'); 

var config = { 
    url: 'https://www.eshbelsaas.com/ui/', 
    ... 
}; 

priority.login(config) 
    .then(() => priority.formStart('CUSTOMERS', null, null, 'demo', 0)) 
    .then(form => form.getRows(1)) 
    .then(rows => console.log(rows)) 
    .catch(err => console.log(err)); 

虽然在这一点上我得到一个权限错误。

Debugger listening on [::]:5858 
{ type: 'apiError', 
    code: null, 
    message: 'Privilege required for \'Customers\' form (internal name = CUSTOMERS, company = Demo Company). Contact your system manager.', 
    form: null, 
    fatal: true } 


更新2

按@leor |的评论我已经添加访问控制头到/ WCF一个V18服务器上。

telnet erpdemo.emerge-it.co.uk 80 
GET /wcf/wcf/service.svc HTTP/1.1 
HOST:erpdemo.emerge-it.co.uk 


HTTP/1.1 200 OK 
Cache-Control: private 
Content-Length: 6437 
Content-Type: text/html; charset=UTF-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD 
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept 
Access-Control-Allow-Credentials: true 
Date: Wed, 21 Jun 2017 10:42:04 GMT 
... 

不幸而clientUI不再出缺少访问控制允许来源标题时,预检仍然失败:

XMLHttpRequest cannot load https://erpdemo.emerge-it.co.uk/wcf/wcf/service.svc. 
Response for preflight has invalid HTTP status code 400 

我可以确认需要什么样的头,预检,请?

回答

1

关于代理:

所有Web浏览器采用了一项名为同源策略。这是针对各种类型的跨站点脚本(XSS)攻击的预防措施。

如果发布页面的HTML页面的起源与API域不同,则此策略要求浏览器阻止对API服务器(在您的情况下为eshbelsaas.com域)的请求。

解决此问题的一种方法是在服务器端,向HTTP响应添加一个特殊的标头,指示浏览器不执行策略。由于这违反了政策的目的,服务器管理员不愿意这样做。

解决此问题的另一种方法是在客户端,通过在浏览器和API服务器之间插入Web代理。浏览器将代理视为HTML页面和API调用的来源,因此API调用将通过。

许多Web开发环境都为此提供完整的代理服务器,请查看IDE的文档以查看您的IDE是否也是如此。

+0

感谢你! - 我试图破解http重定向:[img](!http://tinypic.com/r/2hf6lup/9),但该程序包仍然检测到302'd文件是从不同域到client.js。我使用的是VS,但我想我可以等到我们有了一个新的v18服务器来将客户端放在与service.wcf相同的网址上。 –

+0

@Leor你能详细解释一下吗?当提到HTTP头时,你是指Access-Control-Allow-Origin?你能解释一下如何破坏CORS的目的吗?如果我将Allow-Origin设置为“my-other-domain.com”? 您可以分享更多关于如何设置网络代理吗?这将如何或多或少地安全? 我应该从你的回答中了解到优先级只支持优先级服务器内的API/SDK调用吗?这感觉会限制为我们的客户创建服务的能力。 – Abe

1

起源错误,您可以在这里读到它: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

为了解决这个问题,你需要设置一个代理,这将使服务器请求你。我实际上不确定为什么在使用NPM运行时不会出现相同的错误。从NPM运行时你有什么不同吗?

对于您的权限问题 - 您使用的用户名是什么?

+1

跨域限制仅限于浏览器,因为只有它们容易受到XSS攻击。 代理仅在应用程序开发过程中需要,因为在生产中,您的HTML通常会与服务在同一来源。 – Leor

+0

代理服务器端是否将跨站点“Access-Control-Allow-Origin”头添加到服务器端?请参阅:[链接](https://stackoverflow.com/questions/33164596/no-access-control-allow-origin-header-is-present-on-the-requested-resource-r) –

+0

@Leor - 啊,所以为了防止跨域调用,故意在服务器头文件中省略“访问控制 - 允许 - 来源”,因为客户端通常会从同一个域中提供服务?请问有什么方法可以用来测试https://www.eshbelsaas.com/ui/沙箱(使用apidemo作为用户)吗?代理是什么意思? –