发出跨域的浏览器端API请求
这是关于这篇文章的持续讨论发出跨域的浏览器端API请求在开发人员文档中。
-
嗨!
我在机票进口方面遇到了问题。
Cors策略指出,当资源受到任何类型的身份验证机制(http basic、令牌…)的保护时,Access-Control-Allow-Credentials不能是“*”(无处不在)。
我正试图实现一个应用程序,它使用门票进口,我不能使用它。
有什么我能做的吗?我相信AJAX调用正在正确执行,但答案不是很好(创建了票据,但我收到了该错误)。
我的代码片段:
var request = new XMLHttpRequest();
请求。withCredentials = true;
Var url = "https://***.亚博zendesk.com/api/v2/imports/tickets.json";
请求。open('POST', url, true);
请求。setRequestHeader("Authorization", "Basic *****");
请求。Onreadystatechange = function() {
如果这一点。readyState == 4 && this。状态== 200){
//做某事
其他}{
//执行其他操作
}
};
request.send (jsonObjStr); -
嗨,乔恩,
亚博Zendesk只实现了CORSAPI请求使用OAuth访问令牌进行身份验证,而不是基本身份验证。例子:
请求。setRequestHeader("Authorization", "Bearer " + access_token);
有关获取和使用OAuth访问令牌的所有细节,请参阅上面的文章。
-
嗨
我想使用API与本地主机,所以我做了OAUTH与http://127.0.0.1:8080/zoauth/ticket_details.html
然而,它一直给我'invalid_token'。我从演示代码中唯一改变的是将我的OAUTH令牌手动放入makeRequest()中,如'makeRequest(OAUTH, ticket_number)'。
但它一直在给我未经授权的401。
-
你好,活泼的,
令牌应该在“请求”中指定。setrequesheader ",请尝试下面的
请求。setRequestHeader("Authorization", "Bearer " + token);
-
如果我想制作一个应用程序,为未经身份验证的最终用户创建和读取票据,我该用Zendesk API设置身份验证吗?亚博或者终端用户没有zendesk帐户。亚博
-
嗨,德克,
如果您希望最终用户创建(这是可以的)不需要身份验证)并读取它们的关联票据(其中做需要身份验证),那么您应该签出/ api / v2 /请求。json API端点.它是最终用户应该使用的API(而不是/ API /v2/票据)。Json端点,用于代理)。
这也可能是一篇有用的文章:
-
我得到一些非常奇怪的行为,当试图从一个自定义票证侧边栏应用程序内调用一个API端点。任何帮助将不胜感激!
client.get(“ticket.requester.id”)。then(requestID => {
var requester_tickets_url = "https://crunchyroll.亚博zendesk.com/api/v2/users/" + requesttid ['ticket.request . url . ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'Id '] + "/tickets/requested.json";
console.log (requester_tickets_url);
var r = new XMLHttpRequest();
r.open("GET", requester_tickets_url, true);
r.s trequestheader ('Authorization', 'Bearer ' + oauth_token)
r.send ();
r.onreadystatechange = (e) = > {
console.log (r.responseText)
}
});控制台返回以下错误:
从源'https://162861.apps.zdusercontent.com'访问'https亚博://crunchyroll.zendesk.com/api/v2/users/1380055993/tickets/requested.json'的XMLHttpRequest已被CORS策略阻止:请求的资源上没有'Access- control - allow - origin '标头。此外,根据指示,我应该把什么作为“redirect_url”当应用程序正在从票证侧边栏运行?
谢谢!
------------------
更新:问题已解决。似乎使用以下位置的Oauth密钥就成功了:https://developer.亚博zendesk.com/requests/new而不是Admin > Channels > API > Oauth
-
很高兴你一切顺利,威利。只是为了指出和参考,从您提到的位置抓取OAuth令牌是为Zendesk Support生成OAuth令牌的快速方法,但不适用于其他Zendesk产品(如Chat)。亚博本文还提供了一些为Zendesk Support生成OAuth令牌的好技巧:亚博对应用程序使用OAuth身份验证
-
你好,
不知道如果这是正确的线程,但我有麻烦使用cors从票面栏应用程序。
应用程序本身不调用任何票证api,相反,我只想从“浏览器上下文”而不是Zendesk服务器源进行外部api调用。亚博
因此,当不使用cors (cors=false)时,api调用工作正常,除了起源来自Zendesk服务器,可以有很多不同的ip,这使得它很难允许防火墙阻塞。亚博
相反,我希望它是“浏览器发起”api调用与已知的浏览器ip由防火墙管理,但我不能使它工作:-(
当启用cors (true)时,我收到以下错误:
从原点https://lindex********.zendesk.com访问'https://********.lindex.com/token'的XMLHttpRequest已被CORS策略阻止亚博:对预飞行请求的响应未通过访问控制检查:请求的资源上不存在'Access- control - allow - origin '标头。
-
嗨,格雷格,
通过禁用cors以获取令牌,然后为“数据调用”本身激活cors,最终使其工作。
感谢您的快速回应和承诺:-)
/米凯尔
-
我刚刚和我的同事聊了聊这件事,他提到这实际上是对远程服务器@的限制lindex.com防止CORS调用。原因是这是有效的
歌珥:假
是因为您正在使用我们的代理来发出这些请求,因此CORS不起作用。这里的解决方案是远程服务器返回“Access-Control-Allow-Origin”报头,或者通过传入来利用我们的代理
歌珥:假
. -
当我不希望用户获得重定向的授权访问页面时,是否有任何方法可以绕过授权授权流程或隐式授权流程?仅供参考,我们在应用程序中启用了SAML。
-
嗨,Shweta,正如文章所提到的,我们只对使用OAuth访问令牌进行身份验证的API请求实现了CORS,所以如果您需要向Zendesk发出CORS请求,则必须使用OAuth。亚博
-
我得到一个CORS策略错误,当我做一个基本的API请求(不是OAuth)。什么好主意吗?
错误如下:
访问从原点取回'https://******.zendesk.com/亚博api/sunshine/objects/records?ids=3a96ea2d-cec5-11eb-9895-2ff8f5677382'https://cdpn.io'已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头。如果不透明的响应满足您的需求,请将请求的模式设置为'no-cors'以获取禁用CORS的资源。
代码如下:
var myHeaders = new Headers();
myHeaders。追加(“接受”、“application / json”);
myHeaders。追加(“内容类型”、“application / json”);
myHeaders。append("Authorization", "Basic ***********");
myHeaders。追加(“饼干”、“__cfruid =************");
var requestOptions = {
方法:“得到”,
标题:myHeaders,
重定向:“跟随”
};
fetch(“https ://******亚博. zendesk.com/api/sunshine/objects/records ? id = 3 a96ea2d - cec5 - 11 - eb - 9895 - 2 ff8f5677382 \ n”,requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error)); -
似乎只有通过Javascript从Frontend创建票务表单和实现的唯一方法是:
获取令牌访问权限,在文档上:https://developer.亚博zendesk.com/documentation/ticketing/using-the-zendesk-api/making-cross-origin-browser-side-api-requests/在功能:
函数init() {//重置页面. getelementbyid(“error-msg”).style.display =“没有”;. getelementbyid(“细节”).style.display =“没有”;
varurl = window.location.href;if (url.indexOf('http://localhost:8080/contact.html') !==-1) {if (url.indexOf('access_token=') !==-1) {varaccess_token = readUrlParam (url”,access_token”);localStorage.setItem ('zauth',access_token);varticket_id = localStorage.getItem(“ticket_id”);. getelementbyid(“ticket-id”)。值= ticket_id;window.location.hash = " ";makeRequest (access_token ticket_id);}
if (url.indexOf('error=') !==-1) {varerror_desc = readUrlParam (url,“error_description”);varmsg = '授权错误:' + error_desc;showError(味精);}}}startAuthFlow() {Var endpoint = 'https://***.com/oauth/authorizations/new';Var url_params = '?' +'response_type=token' + '&' +'redirect_uri=http://localhost:8080/contact.html' + '&' +'client_id=dfodevtest' + '&' +'scope=' + encodeuriccomponent ('read write');窗口。Location = endpoint + url_params;}之后,我们在本地存储中有了访问令牌,命名为:zauth,示例定义变量为:zauthValue
然后,当我们创建POST请求时,授权应该是:Bearer + zauthValue
但是这种方式会将用户重定向到authorizations/new…页面。
请登录留下评论。
15个评论