簡體   English   中英

使用Spring Security在入口點后面保護微服務

[英]Securing microservices behind a entrypoint with Spring Security

任何人都知道保護入口點后面的微服務架構的簡單方法是什么?

情況是,我們需要一個采用TCP套接字連接的服務器。 已經實現了在此應用程序上對用戶進行身份驗證的實現,並且該實現基本上將Spring Security與UserDetailsS​​ervice結合使用,並為套接字連接分配了特定的TCP連接。

但是現在我們正在考慮采用更多的微服務體系結構,但是在尋找一種很好的方式將用戶傳播到不同的服務方面存在問題。

例如:用戶連接到TCP套接字服務器,進行身份驗證。 用戶通過套接字發送請求,服務器將呼叫傳播到另一個支持服務(例如Spring Data REST存儲庫),但是客戶端發出的呼叫(例如對一組數據的更改請求)需要特定的用戶角色。 如何檢查這個角色?

因此,基本上,TCP服務器代表用戶發出服務請求。

這取決於身份驗證過程。 如果您已經使用了具有單點登錄功能的身份驗證(例如CAS 2),則可以使用CAS的代理功能在微服務上添加Spring Security。

如果微服務隱藏在前端應用程序的后面,也就是說,如果沒有用戶可以直接聯系它們,則只需在前端和微服務之間的請求中傳遞用戶ID。 由於只能從受信任的應用程序中訪問微服務,因此您可以直接使用用戶ID。

如果要使用微服務中的高級spring-security功能( @PreAuthorize@PostFilter等),則無論身份驗證過程如何,都可以在微服務的spring安全配置中使用自定義的PreAuthenticatedAuthenticationFilter 該過濾器將僅使用在請求中傳遞的用戶ID來設置用戶身份驗證令牌。

所有這些解決方案都不允許在前端應用程序中緩存密碼,這始終是可能的(在會話屬性中),但是這是一種不良的安全做法。

無論如何,您可以為微服務部分使用無狀態安全性,因為前端將始終發送用戶ID。 根據Spring Security Reference Manual ,這就像將屬性添加到http config一樣簡單: < http create-session=stateless> (此參數自3.0版開始存在)

如果使用Java配置,則可以從WebSecurityConfigurerAdapter進行相同的WebSecurityConfigurerAdapter

class SecurityConf extends WebSecurityConfigurerAdapter {
    ...
    @Override
    protected void  configure(HttpSecurity http) {
        http.sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        ...
    }
    ...
}

暫無
暫無

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

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