有一個REST API服務正在開發中,它爲用戶提供了不同的內部SQL數據庫搜索方法,以提出請求。 數據庫包含多個表,每個表都有user_id列,它是用戶表(唯一整數,主鍵)中id列的引用鍵。這個很重要。從JWT令牌隱藏內部用戶標識
當用戶從客戶端應用程序登錄時,他獲取包含具有用戶標識值的「子」部分的JWT標記。 然後,當用戶調用某個API方法時,他只提供JWT令牌,所以API從「sub」獲取用戶ID,並向適當的表進行搜索請求。 因爲每個表都有user_id列,所以沒有必要在SQL查詢中的用戶表上進行聯接(如果我們不需要響應中的用戶信息)。
問題是暴露內部用戶ID是一個不好的做法,可能會導致安全/業務問題。 所以我正在尋找隱藏它。現在我看到如下選項:
更改用戶ID爲字符串列(使用順序GUID),但是這是我們的系統龐大重大更改
現存用戶表額外ext_user_id列(GUID),並在JWT令牌中使用此值。缺點在於,每個SQL查詢都會「加入」User表以獲取用戶標識值。
保持原樣,但使用JWE令牌代替JWT。缺點是每個API請求都會執行令牌解密,這可能會影響性能。
也許還有其他選擇嗎?或者其中一種方法比其他方法更有優勢(實際上除了第一種)?