[英]How to allow some User only access his own data in endpoint in Spring Boot / Spring Security with pagination?
[英]Spring Cloud - how to allow access to endpoint for specific microservice only?
我有簡單的微服務架構:
當用戶嘗試登錄時,憑據將從邊緣服務傳遞到身份驗證服務。 Auth服務從用戶服務(使用@FeignClient )獲取用戶數據,如果用戶名/密碼匹配,則生成令牌。 沒什么好看的。
這種方法存在“小問題”:用戶服務中的端點/api/user/{username}
,由auth服務用於獲取用戶的數據,任何用戶都可以使用它來獲取任何其他用戶的數據(密碼,角色等)。 一個解決方案是以某種方式為角色AUTH_SERVICE
auth-service創建JWT令牌,並在用戶服務端檢查JWT,如果角色不同, AUTH_SERVICE
拒絕AUTH_SERVICE
請求。
還有其他解決方案嗎?
編輯
我認為我的設計很常見,但顯然我應該首先更具體:
EDIT2:
我最終將auth-service與用戶服務合並,這是來自幾個SO用戶的建議。 在考慮之后,似乎沒有必要為JWT生成單獨的auth服務。 我接受了@Abhijit Sarkar的答案,因為它有一些有效點,即使他對額外調用auth-service以驗證令牌的有效性是不對的。
在我看來,你的服務太薄了; 這種情況發生了,隨着時間的推移,您開始意識到由於維護和性能問題,服務需要更粗糙。 從auth到用戶服務的另一個HTTP調用的成本,以及維護服務間身份驗證的開銷並不是微不足道的。
IMO,用戶服務可以存在其他用戶信息,如地址等,如果存在,但auth服務應負責管理自己的數據。 這正是Spring Security擁有UserDetailsService的原因 。
無論用戶憑據和其他用戶信息是在同一個表中,還是在同一個數據庫中,這都是一種設計選擇。 不同的人會給你不同的答案,但根據我的意見和經驗,可以接受少量 相關服務之間的共享數據庫,特別是因為這些表將通過外鍵(userId)相關聯。 分布式事務是純粹的邪惡與微服務,所以我甚至沒有去那里。 刪除/更新用戶時,請使用事件進行最終一致性。
編輯 :
在與OP聊天之后,我了解到用戶服務實際上是他設計中的OAuth資源服務器。 他不清楚,因此對我來說,OAuth授權服務器在哪里。 無論如何,我堅持我的建議是合並用戶服務和auth服務。
在auth和用戶服務中使用相同的數據庫會更好。 Auth服務只需要訪問憑證。
您甚至可以在用戶服務上擁有一個安全層,以根據角色實現對URI的訪問控制。
你需要這樣的東西:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.