【问题标题】:Unable to use Acumatica's REST API in a website无法在网站中使用 Acumatica 的 REST API
【发布时间】:2021-04-15 19:53:49
【问题描述】:

我正在尝试使用以下代码在网站中使用 Acumatica REST API (2020 R1)

async function loginAcumatica(){
    try{
        const { apiUrl, clientId, clientSecret, username, password } = await getCredentials();
        const url = `${apiUrl}/identity/connect/token`;
        const result = await axios.post(url, {
            headers: {
                'content-type': 'application/x-www-form-urlencoded'
            },
            body: `grant_type=password&client_id=${clientId}&client_secret=${clientSecret}&username=${username}&password=${password}&scope=api`
        });
        console.log(result);
        return result;
        
    }catch(err){
        console.log(err);
    }
}

客户端 ID 和客户端密码值来自 Acumatica 的连接应用程序。在 Connected Application 中创建新记录时,我使用了 Resource Owner Password Credentials 身份验证类型。 用户名和密码是用户登录凭据。

但是,我无法连接到 API,并且总是不断出错。有什么我遗漏的或不可行的吗?

谢谢。

【问题讨论】:

  • 如果您分享收到的错误消息会有所帮助
  • 我得到 HTTP 状态代码 415 与上述请求。但是,即使我以对象格式发送请求,我也会得到 HTTP 状态代码 400。
  • 您是否使用 Chrome 开发者工具查看完整的请求和响应是什么?您的页面是否与您的 Acumatica 网站在同一个域中运行?如果不是,我怀疑这是由于 CORS 而失败 - Acumatica 默认没有设置 CORS 标头,浏览器将阻止跨域请求。
  • 是的,我已经检查了请求并通过 API 端点传递的记录进行了验证,还检查了响应。不幸的是,两者不在同一个域中。是的,我们已经要求 Acumatica 启用 CORS,他们已经确认它已启用。此外,我们现在没有收到 CORS 错误,但仅与 API 请求有关。

标签: acumatica


【解决方案1】:

错误 415 表明 body 内容类型存在错误。

当使用identity/connect/authorize 端点时,Acumatica Documentation 具有在 URL 中而不是正文中传递的参数。

没有指定与identity/connect/token 端点一起使用的正文内容类型。它可能不同于:application/x-www-form-urlencoded

【讨论】:

  • 我也试过这种方式。 imgur.com/Rowj2Ko 我得到了这个结果。 "message":"["请求失败,状态码 400"]"
  • 另外,我想补充一点,我正在尝试通过资源所有者密码凭据流连接到 Acumatica API,其中基于文档(2020 R1 集成开发指南),它说它需要grant_type、client_id 、client_secret、用户名、密码和请求正文中的范围。
【解决方案2】:

Acumatica REST API 的设计方式不能与带有 API 库(例如 fetch)的 Javascript 一起使用,因为它被认为是不安全的,因为会暴露登录凭据和密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2018-07-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多