【问题标题】:Allow API access to anyone with sails policy允许任何拥有sails 政策的人访问API
【发布时间】:2018-09-09 15:03:30
【问题描述】:

我正在尝试将我的 SailsJS API 与另一个节点应用程序一起使用,并不断收到 403 Forbidden 响应类型。

我的操作是scale/create-weight,它使用发布的数据创建数据库记录。

我将操作添加到config/policies.js 以允许未登录用户访问:

//config/policies.js

module.exports.policies = {

  '*': 'is-logged-in',

  // Bypass the `is-logged-in` policy for:
  'entrance/*': true,
  'account/logout': true,
  'view-homepage-or-redirect': true,
  'deliver-contact-form-message': true,
  'scale/create-weight': true

};

这是我尝试从同一台计算机上的单独节点应用程序访问 API 的方式:

const querystring = require('querystring')
const http = require('http')

const postData = querystring.stringify({
  'weight' : '10',
  'units' : 'ounces',
  'userId' : '5b8c16301cee97343513e184'
});

var options = {
    host: "localhost",
    port: 1337,
    path: "/api/v1/scale/create-weight",
    method: "POST",
    headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': Buffer.byteLength(postData)
      }
};


const req = http.request(options, (res) => {
  console.log(`STATUS: ${res.statusCode}`);
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`BODY: ${chunk}`);
  });
  res.on('end', () => {
    console.log('No more data in response.');
  });
});

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

// write data to request body
req.write(postData);
req.end();

有服务器响应:

STATUS: 403
HEADERS: {"x-powered-by":"Sails <sailsjs.com>","content-type":"text/plain; charset=utf-8","content-length":"9","etag":"W/\"9-PatfYBLj4Um1qTm5zrukoLhNyPU\"",
"set-cookie":["sails.sid=s%3AonM7KWW6ohNoOPNiNjXy9NRFapolNavV.eZHy2P1o4WN1BvDbIWAZEsafG9RzaN1D6O%2FgaEjoLq0; Path=/; HttpOnly"],"date":"Sun, 09 Sep 2018 14:
55:58 GMT","connection":"close"}
BODY: Forbidde
BODY: n
No more data in response.

我必须做什么才能允许外部应用使用 API?

【问题讨论】:

  • 更改顺序。将星号放在底部。 Sails 使用 express,因此如果它按顺序注册这些中间件,则首先应用星号。
  • 这不是风帆的问题,我上面有的是默认策略文件加上我为我的操作添加的行。

标签: javascript node.js sails.js


【解决方案1】:

问题是由csrf 安全策略引起的。虽然完全关闭设置不好,但您可以在config/routes.js 文件中按路由进行管理。

我更新了路线,它可以工作:

'POST /api/v1/scale/create-weight': {
  action: 'scale/create-weight',
  csrf: false
},

我最终将实施 API 密钥/API 机密安全策略,以便使用 API 的第 3 方可以通过这种方式进行身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2020-11-02
    • 2019-09-16
    • 2010-11-16
    • 2023-03-30
    • 2021-11-07
    相关资源
    最近更新 更多