使API端点成为私有

时间:2015-04-04 10:27:55

标签: angularjs node.js api express passport.js

我正在使用AngularJS,express,nodejs和Passportjs开发一个小的webApp。我一直在按需创建API的端点,但现在我遇到了问题。 我有一个端点,用户无法在需要时调用该端点。此API调用是在用户在应用中执行特定操作时生成的,因此他们可以获得积分。 端点类似于/ api / users / updatePoints,我不希望使用开发人员工具的用户重新发送他们不应得的呼叫和收入点。 我怎么能做到这一点?我一直在思考,但我想不出任何合理的事情。

提前谢谢你:)

- EDIT-- 最后我刚刚删除了那个ENDPOINT并直接写在服务器端的数据库中。不是我想要的解决方案,但足够好。谢谢!!

1 个答案:

答案 0 :(得分:0)

回答已经为时已晚,但我认为这可以帮助某人。

要私有化端点,请通过设置相应的响应标头仅允许白名单的Origins发出,并为所有其他用户发送403状态代码(这表示禁止,401表示重试)。

这是中间件私有化端点的示例。

module.exports = function (allowedOrigins) {
   const whitelistedOrigins = Array.isArray(allowedOrigins) ? allowedOrigins : [allowedOrigins];
   return function (req, res, next) {
      const origin = req.headers.origin;
      if (whitelistedOrigins.indexOf(origin) > -1) {
         res.setHeader("Access-Control-Allow-Origin", origin);
         next();
      } else {
         res.status(403).json({
           msg: "This is a private Endpoint, Please contact the Admin",
         });
      }
   };
};

这里是用法示例。

const privatizeEndpoint = require("../customMiddlewares/privatizeEndpoint");

router.post("/someEndpoint", privatizeEndpoint(["http://myprivate.domain.com"]), (req, res) => {
     console.log("Inside Private Endpoint");
});

但是,您的端点仍会公开,但至少仅将其提供给列入白名单的域。

请注意,即使是无源请求也将被阻止(卷曲命令或通过POSTMAN)。