【问题标题】:Angular / ExpressJS / RestFul SecurityAngular / ExpressJS / RestFul 安全性
【发布时间】:2015-10-27 11:21:18
【问题描述】:

目前我正在使用 Angular、ExpressJS 和 Mongodb 构建应用程序。简短的问题:让角度到达(GET/POST/DELETE)'/api'(restful 支持 expressJS+Mongodb)。但是将 api 设为私有,因此只有 angular 客户端可以使用 api。

长问题: - Angular 客户端http://localhost:3000, - 表达+宁静http://localhost:3005/api, - 到 localhost 的 Apache 代理:domain.com -> localhost:3000

我的 Angular 客户端正在向后端 api 发出 GET/POST 请求。此 api 应仅可用于在端口 3000 上运行的客户端。REST 客户端请求应被快速服务器阻止。一切都在apache2后面工作。 Apache 仅反向代理客户端。客户端和服务器端是分开的。如何将服务器端设为私有,不能从外部访问?

到目前为止我尝试过:

  • 白名单 CORS localhost:3000 并阻止所有其他,由于反向代理,将无法正常工作。导致被 CORS 阻止。
  • Csrf 令牌 cookie,可以通过 headers 操作、获取值和设置。
  • 使用登录不是一种选择,因为没有用户。

-也许我只需要朝着正确的方向前进,我对任何答案都很满意。

编辑我发现我的 api 在代理后面不可访问。您无法调用 localhost:3005/api,因为 apache 将所有内容都代理到 localhost:3000。我是对的吗? 99%安全吗?

【问题讨论】:

  • 很难确定您的实际问题是什么。任何地方都没有问号 (?) 的事实无济于事。
  • 编辑:“我怎样才能使服务器端只私有,不能从外部访问?”
  • 我认为除了创建会话令牌之外别无选择。
  • 我阅读了很多关于会话令牌尚未准备好投入生产的帖子,因为它会泄漏内存。

标签: javascript angularjs rest express


【解决方案1】:

好的,解决这个问题的好方法是构建与 OAuth 服务器集成的 api。之后,您可以简单地生成一个客户端 ID,并将其放在前端的某个位置以便访问。然后,您的前端将能够请求和使用令牌,这些令牌将授予访问数据的权限。

这具有额外的好处,即如果将来需要,它能够支持基于客户端 ID 的登录和选择性访问。这是一篇有趣的文章,您可以查看。

http://scottksmith.com/blog/2014/07/02/beer-locker-building-a-restful-api-with-node-oauth2-server/

【讨论】:

  • 谢谢你的回答,我会试试这个。但这会在保留代理后面工作吗?这似乎是它的 1 个全球项目,而不是 2 个独立的项目。
猜你喜欢
  • 2018-07-27
  • 2020-04-28
  • 2012-02-13
  • 2017-11-12
  • 2011-11-03
  • 2012-09-19
  • 2012-01-21
  • 2020-02-02
  • 1970-01-01
相关资源
最近更新 更多