任何人都知道保护入口点后面的微服务体系结构的简单方法是什么?
情况是,我们需要一个采用TCP套接字连接的服务器。已经实现了在此应用程序上对用户进行身份验证的实现,并且该实现基本上将Spring Security与UserDetailsService结合使用,并为套接字连接分配了特定的TCP连接。
但是现在我们正在考虑采用更多的微服务体系结构,但是在寻找一种很好的方式将用户传播到不同的服务方面存在问题。
例如:用户连接到TCP套接字服务器,进行身份验证。用户通过套接字发送请求,服务器将呼叫传播到另一个支持服务(例如,Spring Data REST存储库),但是客户端发出的呼叫(例如,对一组数据的更改请求)需要特定的用户角色。如何检查这个角色?
因此,基本上,TCP服务器代表用户发出服务请求。
这取决于身份验证过程。如果您已经使用了具有单点登录功能的身份验证(例如CAS 2),则可以使用CAS的代理功能在您的微服务上添加Spring Security。
如果您将微服务隐藏在前端应用程序的后面,也就是说,如果没有用户可以直接联系它们,则只需在前端和微服务之间的请求中传递用户ID。由于只能从受信任的应用程序中访问微服务,因此您可以直接使用用户ID。
如果要使用微服务中的高级spring-security功能(@PreAuthorize
,@PostFilter
...)PreAuthenticatedAuthenticationFilter
,无论身份验证过程如何,都可以在微服务的spring安全配置中使用自定义。该过滤器将仅使用在请求中传递的用户ID来设置用户身份验证令牌。
所有这些解决方案都不允许在前端应用程序中缓存密码,这始终是可能的(在session属性中),但是这似乎是一种不良的安全做法。
无论如何,您可以为微服务部分使用无状态安全性,因为前端将始终发送用户ID。根据Spring Security Reference Manual,这就像将属性添加到http config一样简单:(< http create-session=stateless>
此参数自3.0版开始存在)
如果您使用Java配置,则可以从进行相同的操作WebSecurityConfigurerAdapter
:
class SecurityConf extends WebSecurityConfigurerAdapter {
...
@Override
protected void configure(HttpSecurity http) {
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
...
}
...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句