2016-02-03 33 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進行編碼並查看它們何時到期... –