2016-06-21 86 views
0

我是新手,試圖設置節點&身份驗證時創建JWT。帶節點和護照的JWT:重新啓動服務器

我希望能夠構建一個「無狀態身份驗證機制」來減少回到數據庫的需求。如果沒有共享祕密或JWT保存在數據庫中,我假設服務器是否重新啓動,所有發佈的JWT(登錄用戶)都失效,因此需要一個新的JWT for所有用戶訪問受保護的路由。我不希望用戶在每次重新啓動服務器或新的實例時都重新登錄。

我相信我可以將靜態共享密鑰傳遞給Node環境,每次我都可以使用它來生成不影響服務器重新啓動的相同JWT。

問題:

  1. 如果一個好的做法是在共享的祕密,在哪裏以及如何我應該創建這個共享祕密傳遞?以及我必須通過什麼共享祕密?

  2. 但是,如果將共享密鑰傳遞給Node環境並不是一個好策略,那麼我對所有建議都有所耳聞?

,當我說我的意思是共享的祕密更新 「鍵(S)」。我會更新問題,以免引起混淆。

+0

爲什麼你需要將密鑰存儲在數據庫中?識別用戶所需的信息通常存儲在JWT本身中,服務器只需要擁有密鑰的祕密來驗證密鑰的信息沒有改變。 請參閱[本頁](https:// jwt。io /),用於構成智威湯遜的視覺表示。 – WillS

+0

對不起 - 我更新了問題。 – user1107173

回答

1

實際上通過密鑰作爲環境是這種應用程序的推薦方式。

因爲只有正在運行的應用程序才能看到環境,並且減少了泄漏密鑰的可能性(與其他應用程序代碼提供的配置文件相比)。

通常情況下,您不會經常旋轉按鍵,通常情況下,假設您控制自己的環境,每月旋轉一次按鍵。

但請記住,密鑰僅用於證明令牌由您簽名,通常是在令牌中僅包含一小部分信息(出於性能原因)的良好慣例。所以你仍然需要去數據庫檢索關於用戶本身的額外信息。您可以將所有用戶信息添加到令牌中,但請記住需要爲每個請求發送令牌並增加開銷。

如果您使用像supervisord這樣的進程管理器,您可以在那裏設置環境,併爲配置文件提供適當的權限以避免密鑰泄漏。

我通常使用環境將這種信息傳遞給我的節點應用程序,我將它用於JWT,AWS密鑰,SMTP憑證等。它使您的代碼解耦並避免可能的錯誤,如將私鑰推入公共代碼版本像github這樣的系統。