15个评论

  • 乔恩我。

    嗨!

    我在机票进口方面遇到了问题。

    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);
    0
  • 查尔斯Nadeau
    亚博Zendesk文档团队

    嗨,乔恩,

    亚博Zendesk只实现了CORSAPI请求使用OAuth访问令牌进行身份验证,而不是基本身份验证。例子:

    请求。setRequestHeader("Authorization", "Bearer " + access_token);

    有关获取和使用OAuth访问令牌的所有细节,请参阅上面的文章。

    0
  • 活泼的赵



    我想使用API与本地主机,所以我做了OAUTH与http://127.0.0.1:8080/zoauth/ticket_details.html

    然而,它一直给我'invalid_token'。我从演示代码中唯一改变的是将我的OAUTH令牌手动放入makeRequest()中,如'makeRequest(OAUTH, ticket_number)'。

    但它一直在给我未经授权的401。


    0
  • 美妙的Audren

    你好,活泼的,

    令牌应该在“请求”中指定。setrequesheader ",请尝试下面的

    请求。setRequestHeader("Authorization", "Bearer " + token);
    0
  • 德克Wolthuis

    如果我想制作一个应用程序,为未经身份验证的最终用户创建和读取票据,我该用Zendesk API设置身份验证吗?亚博或者终端用户没有zendesk帐户。亚博

    0
  • 布莱恩弗林

    嗨,德克,

    如果您希望最终用户创建(这是可以的)需要身份验证)并读取它们的关联票据(其中需要身份验证),那么您应该签出/ api / v2 /请求。json API端点.它是最终用户应该使用的API(而不是/ API /v2/票据)。Json端点,用于代理)。

    这也可能是一篇有用的文章:

    使用Zendesk API构建自定义票证表单亚博

    0
  • 威利

    我得到一些非常奇怪的行为,当试图从一个自定义票证侧边栏应用程序内调用一个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

    0
  • 布莱恩弗林

    很高兴你一切顺利,威利。只是为了指出和参考,从您提到的位置抓取OAuth令牌是为Zendesk Support生成OAuth令牌的快速方法,但不适用于其他Zendesk产品(如Chat)。亚博本文还提供了一些为Zendesk Support生成OAuth令牌的好技巧:亚博对应用程序使用OAuth身份验证

    0
  • 米凯尔荷得拉得

    你好,

    不知道如果这是正确的线程,但我有麻烦使用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 '标头。

    0
  • 米凯尔荷得拉得

    嗨,格雷格,

    通过禁用cors以获取令牌,然后为“数据调用”本身激活cors,最终使其工作。

    感谢您的快速回应和承诺:-)

    /米凯尔

    0
  • 格雷格Katechis
    亚博Zendesk开发者倡导

    我刚刚和我的同事聊了聊这件事,他提到这实际上是对远程服务器@的限制lindex.com防止CORS调用。原因是这是有效的歌珥:假是因为您正在使用我们的代理来发出这些请求,因此CORS不起作用。

    这里的解决方案是远程服务器返回“Access-Control-Allow-Origin”报头,或者通过传入来利用我们的代理歌珥:假

    0
  • 什维塔

    当我不希望用户获得重定向的授权访问页面时,是否有任何方法可以绕过授权授权流程或隐式授权流程?仅供参考,我们在应用程序中启用了SAML。

    0
  • 安娜Roussanova

    嗨,Shweta,正如文章所提到的,我们只对使用OAuth访问令牌进行身份验证的API请求实现了CORS,所以如果您需要向Zendesk发出CORS请求,则必须使用OAuth。亚博

    0
  • 乔恩·西蒙

    我得到一个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));
    0
  • Chinh表象

    似乎只有通过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…页面。

    0

登录留下评论。

由Zendesk提供支亚博持