2017-06-02 99 views
0

這是一個開放式問題,所以我很抱歉。我會盡我所能保持它的具體。如何實現基於Express的REST API的CAS認證

我有一個建立在Express上的REST API(實際上使用Sails.js)。在前端,我有一個由一個非常輕量級的Express應用程序提供的Angular2應用程序。前端對後端(API)進行HTTP調用。

沒有人應該能夠訪問前端或後端沒有通過CAS認證。我使用cas認證模塊在前端實現了CAS認證 - 沒有問題。但是,API仍然不受保護。

我想弄清楚如何保護後端。我已經實施了CORS保護,只允許來自白名單域的請求。但是,這似乎不夠。

我假設我需要發送一個身份驗證令牌以及每個REST請求到後端。我只是不知道如何得到這個令牌。

任何在正確的方向微調將不勝感激。

回答

1

爲了保護您的無狀態API,您可以使用passportjs和passport-http-bearer策略實施持票人令牌。然後設置(或實施您自己的)一個提供令牌的服務(請參閱https://github.com/jaredhanson/oauth2orize)。您可以實現完整的oauth2規範並交換授予令牌的方式,或者採用較簡單的方法:

1)當用戶使用用戶名/密碼進行身份驗證時,然後將它們發送到生成令牌(如255個字符)的服務,用戶存儲令牌。您可以在這裏獲得不同的授權,以獲得不同的授權/權限,但我假設用戶是用戶。 2)添加護照承載策略,實質上查找令牌,檢查它的有效性 3)添加一個策略來調用passport.authenticate('承載'...檢查您的令牌 - 它將查看授權標頭然後拒絕(401,返回登錄等) 4)要求所有要保護的方法的上述政策(登錄除外) 5)任何受保護的方法將需要一個具有有效承載令牌的auth頭部,例如授權:持票人kj233kj42kdskfksaj_lots_of_letters_and_numbers_ak3k29asd32kad

我希望能幫助您入門。

+0

謝謝!我最終做的是前端服務器在身份驗證時發出JWT。智威湯遜由後端共享的祕密密鑰簽署。每個到後端的請求都包含標題中的JWT。然後,後端可以使用該密鑰進行解密並驗證請求用戶的身份。這是有效的,因爲我不需要將API提供給第三方,所以可以讓2臺服務器共享一個密鑰。 – Faris

+0

是的智威湯遜也很棒,真棒。現在我的大部分API都需要爲移動應用提供服務,而且我不想在手機上存儲祕密。你是否使用jwt的包裝或自己的代碼? –