簡體   English   中英

如何將JWT用於使用Node.js編寫的代理服務器?

[英]How to use JWT for a proxy server written using Node.js?

這絕對是一個新手問題,我是Node.js初學者。

我不確定,這是問這個問題的正確地方。 但是我可能需要這個龐大社區的想法。 因此,讓我解釋一下我要做什么。

服務器配置:

  1. Node.js-4.0.0
  2. Hapi.js-10.0.0
  3. 雷迪斯

場景:

我正在使用hapijs在nodejs中編寫代理服務器。 我的后端是基於ATG的電子商務網站,並且我的api將被網絡瀏覽器,移動應用等使用。

我們計划不將ATG發送的cookie發送到瀏覽器和移動設備。

因此,為了維護ATG的會話和cookie,這就是我們進行POC的方式。

首先,我們計划不考慮存儲從ATG返回的匿名用戶cookie。 因此,我們完成了兩個POC。

(我們很多人都知道,匿名cookie是什么,如果我用一個詞-Guest Checkout的話,讓我解釋一下。有很多方法可以實現這一點。但是我的Commerce Backend是這樣實現的,當我們轉到在網站上,您將商品添加到購物車並在沒有登錄的情況下簽出該商品嗎?每當我們添加商品時,它們只會存儲在您的瀏覽器Cookie中,而不會存儲在持久性數據庫中,無論如何用戶都想登錄/注冊從瀏覽器檢索cookie並將其存儲在數據庫中的帳戶(基本上,匿名購物車已轉移到已登錄的用戶。)

POC-1(不考慮訪客結帳):

  1. 要訪問我的api,用戶必須先登錄,成功登錄后,我們會生成一個rand-token並將其存儲在與ATG為已登錄用戶發送的cookie關聯的Redis db中,並將ttl設置為1小時后返回給客戶的那個令牌

  2. 現在,無論何時調用任何api方法,都應在授權標頭中發送令牌,我將檢查令牌的有效性,並再次擴展ttl 1小時,並檢索與該令牌關聯的cookie,然后在ATG請求選項中設置該cookie並提出要求。

3.注銷后,我將清除cookie並刪除令牌。

通過在jwt有效負載中生成帶有用戶登錄信息的JWT令牌,我已經成功實現了JWT。 使用了hapi-jwt-auth2。

POC-2(帶有維護來賓Cookie),

  1. 我的API將具有終結點/ auth / generatesession,這將返回一個64字節的隨機令牌(為此我們使用rand-token npm模塊),該令牌將在24小時后失效。

  2. 所有方法都需要將訪問令牌在授權標頭中傳遞回給我,我將把令牌ttl延長到24小時。

  3. 現在,他們可以調用任何api方法,例如addtocart或其他方法,即使在將項目添加到cart之后,突然他們也想登錄,或者我可以使用其訪客會話cookie並在成功登錄后將該cart轉移到持久數據庫。

問題:

  1. 我應該在第二種情況下使用JWT嗎? 如果是這樣的話,
  2. 如何在第二種情況下實現JWT? (Coz,不知道用戶是誰?)
  3. 有人認為這是編寫這樣的代理服務器的好主意嗎?
  4. 如何使用ATG會話到期來簡化此令牌的會話到期?
  5. 是否有人像這樣使用Node.js? 它如何縮放?
  6. 如果有人願意給我一個如何編寫此代理服務器的想法,它將對我有很大幫助。

抱歉,如果這個問題太長,請以我的解釋方式為准。

提前致謝。

  1. 當然可以,為什么不呢?
  2. 您不一定需要用戶。 JWT存儲任意數據,用戶名可以為空白或匿名。 如果用戶記錄了該日志,並提供了與訪客推車相關的令牌,則可以假定允許該用戶聲明該推車的內容,並且匿名推車可以被銷毀。
  3. 當然,這很普遍(免責聲明:我從事的工作與您非常相似)。
  4. TTL是合理的,但我不知道什么是ATG或如何處理它。
  5. 是。 只要您確保服務器是無狀態的,並且可以通過Redis之類的方法來管理所有狀態,它的伸縮性就很好。
  6. 問題范圍太廣,我只想使用Express + Redis / Mongo / Postgres。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM