3

我正在查看Kong來替換我現有的手動推出的NodeJS API網關。目前,我有一個用戶服務,通過在登錄時提供一個JWT來處理認證(用Django編寫),然後客戶端通過標頭傳入。我當前的API網關會攔截任何呼叫,執行驗證呼叫回用戶服務,並用X-User-IdX-User-Email取代JWT標頭。使用Kong進行身份驗證

據我所知,Kong可以做大致相同的事情。我試圖弄清楚這應該如何工作的流程在完美的世界。我仍然有機會替換大部分基礎設施,因此重寫一些服務並不是完全不可能的。

所以,在我的腦海裏,會發生什麼樣的是以下內容:我的網站上

  1. 用戶註冊。然後我在Kong上創建一個新用戶,用戶名/ ID爲
  2. 用戶登錄。這是我卡住的地方。我是否登錄(或者在這種情況下,簡單地認證用戶是說用戶),向Kong請求JWT並返回該用戶?如果我想在智威湯遜的有效載荷中添加更多數據呢?智威湯遜到期時,香港會發生什麼?
  3. 當用戶請求服務時,Kong會從頭文件中嗅出JWT,將其替換爲X-Consumer-*--是對的嗎?

如果我的思維錯誤或者有更好的方法來實現這一點,請糾正我。我對整個微服務都很陌生。

回答

0

我工作的一個類似的設置,這些都是我的發現/結論的時刻:

用戶註冊必須是你所描述的方式。

登錄後我相信有兩種可能的方式來解決這個問題:

  1. 存儲在您的用戶數據庫中的consumer_id,
  2. 存儲在您的用戶數據庫中的智威湯遜密鑰和密碼。

在場景1中,您必須從kong獲取jwt密鑰和祕密,並生成一個jwt令牌並使用此令牌向您的kong服務發出請求。

場景2與場景1非常相似,除非您不必爲了生成jwt令牌而對kong進行任何請求。

您可以將其他有效負載參數添加到jwt令牌,但這些參數不會傳遞到您的上游服務。但它似乎像這個插件可以解決這個問題(我沒有測試過這還):

https://github.com/wshirey/kong-plugin-jwt-claims-headers

香港傳遞來自於授權的智威湯遜消費者對上游業務的custom_id和用戶名,例如:

x-consumer-custom-id: [245] 
x-consumer-username: ['my-test-user'] 
x-consumer-id: ['1e9e25dd-396f-4195-94fc-f2a8bd8447a2'] 

它也傳遞整個授權標題