2016-02-03 37 views
5

我已经使用Google搜索了一天以上。可能是我错过了正确的关键字。在Angular2中保证API密钥的安全

我有以下设置:

  • ExpressJS API
  • Angular2应用(与PM2在端口3000上运行) - 通过nginx的

在同一台服务器上运行两个服务 。

对API的调用(MYDOMAIN/API /)代理到127.0.0.1:3000

对于需要授权,我将使用智威汤逊和用户身份验证API调用。

我想要实现的是我为我的angular2应用程序生成一个令牌,该应用程序允许/需要进行公共呼叫(例如产品清单)。

当我不希望别人通过直接api调用(使用盗取的令牌)获得我的产品和价格时,此令牌需要安全地传输。

任何帮助表示赞赏。

回答

0

您的代币希望能够通过https访问。并且当它不能得到它...

UPDATE

从维基:

因为HTTPS捎带完全在TLS之上的HTTP,的 全部底层HTTP协议进行加密。这包括 请求URL(其中要求特定网页),查询 参数,头,

https://en.wikipedia.org/wiki/HTTPS

+0

对不起,我在这部分有点愚蠢。当然我会设置https。但是我仍然必须将我的公共令牌包含在角度应用程序的Request Header/url param中,因此任何人都可以看到它。或者我错过了什么? – user1261284

+0

请参阅wiki,因为https是加密标题的应用程序层协议。 – eesdil

+1

是的,你的桅杆在每次通话中都包含标记。但是这个令牌是在服务器上生成的......我现在有类似的设置(express-angular 2),我将在这里提交我的工作流程作为答案。 –

1

首先,@eesdil说,你必须使用HTTPS。在这种情况下,您的所有来电都是经过加密和安全的。

在我的示例(Angular 2,Express和JWT)中,我使用加密模块和pbkdf2算法进行哈希密码。

这是工作流程:

  • /登录/注册 - >散列密码和生成盐 - >存储它在服务器上
  • /登录 - >验证密码来防止存储的一个 - >生成JWT - >保存它在localStorage的客户端
  • /API - >发送JWT在验证头 - >验证服务器上 - >发送响应

工作例子是在这里:https://github.com/vladotesanovic/angular2-express-starter

+0

好的,非常感谢。但是,让我们说你的初学者应用程序将在主页上列出城市。我不希望人们直接致电api/cities。所以我生成了一个内部分配给公共API调用的JWT。我可以通过快速会议以安全的方式提供公共JWT。我会在整个过程中设置https和我的想法,并返回结果。 – user1261284

+0

不,不要使用会话和cookie来存储或传输jwt令牌。无论他们从哪个位置呼叫/ api /城市,他们都需要有效的jwt。我将用/ refresh功能改进我的示例。您可以在客户端对jwt进行编码并查看它们何时到期... –