Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin Spring安全性-无需身份验证即可访问私有端点_Kotlin_Spring Security_Microservices_Spring Cloud_Netflix Zuul - Fatal编程技术网

Kotlin Spring安全性-无需身份验证即可访问私有端点

Kotlin Spring安全性-无需身份验证即可访问私有端点,kotlin,spring-security,microservices,spring-cloud,netflix-zuul,Kotlin,Spring Security,Microservices,Spring Cloud,Netflix Zuul,我正在使用spring创建具有微服务体系结构的后端。我有一台eureka服务器、一台zuul网关服务器和其他微服务,它们使用feing代理相互通信。。我想知道的是如何在每个请求中只检查一次安全性和授权?我的意思是,如果我有一个微服务a,它通过一个私有端点调用一个微服务B,那么如何只检查微服务a的第一次调用的安全性和授权,而忽略微服务B的安全性?知道当呼叫直接针对microserviceB的同一端点时,必须进行安全检查 例如,身份验证时,使用公共身份验证()端点的登录微服务,调用帐户微服务,通过私

我正在使用spring创建具有微服务体系结构的后端。我有一台eureka服务器、一台zuul网关服务器和其他微服务,它们使用feing代理相互通信。。我想知道的是如何在每个请求中只检查一次安全性和授权?我的意思是,如果我有一个微服务a,它通过一个私有端点调用一个微服务B,那么如何只检查微服务a的第一次调用的安全性和授权,而忽略微服务B的安全性?知道当呼叫直接针对microserviceB的同一端点时,必须进行安全检查

例如,身份验证时,使用公共身份验证()端点的登录微服务,调用帐户微服务,通过私有getUserInfo()端点获取用户信息。 在这种情况下,必须忽略两个端点的安全检查,因为authentication()端点是公共的

第二个示例,在验证身份验证时,具有私有验证身份验证()端点的登录微服务调用帐户微服务的同一私有端点getUserInfo()。在这种情况下,必须对validateAuthentication()端点进行安全检查,并忽略getUserInfo()端点的安全检查

知道可以直接调用getUserInfo()端点,在这种情况下必须进行安全验证

这是我的SecurityConfig课程

@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter()
{
    companion object
    {
        val PUBLIC_END_POINTS = arrayOf(
                "/auth/identification"
        )
    }


    override fun configure(http : HttpSecurity)
    {
        http
            .cors().and().csrf().disable()
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
            .authorizeRequests()
                .antMatchers(*PUBLIC_END_POINTS).permitAll()
                .anyRequest().authenticated()
            .addFilterBefore(AuthenticationFilter() , UsernamePasswordAuthenticationFilter::class.java)
    }
}
class AuthenticationFilter : OncePerRequestFilter()
{

    override fun doFilterInternal(request : HttpServletRequest , response : HttpServletResponse , filterChain : FilterChain)
    {
        // validate token and user's info
        filterChain.doFilter(request, response)
    }
}
这是我的AuthenticationFilter

@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter()
{
    companion object
    {
        val PUBLIC_END_POINTS = arrayOf(
                "/auth/identification"
        )
    }


    override fun configure(http : HttpSecurity)
    {
        http
            .cors().and().csrf().disable()
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
            .authorizeRequests()
                .antMatchers(*PUBLIC_END_POINTS).permitAll()
                .anyRequest().authenticated()
            .addFilterBefore(AuthenticationFilter() , UsernamePasswordAuthenticationFilter::class.java)
    }
}
class AuthenticationFilter : OncePerRequestFilter()
{

    override fun doFilterInternal(request : HttpServletRequest , response : HttpServletResponse , filterChain : FilterChain)
    {
        // validate token and user's info
        filterChain.doFilter(request, response)
    }
}

有人能帮我吗?我花了很多时间在互联网上搜索,但没有找到解决方案。

您必须仅通过网关提供身份验证,并从其他微服务中删除spring安全性。您必须在intranet中执行此pulic微服务,并仅将网关公开给internet。您必须实现AuthenticationEntryPoint并在HttpSecurity配置中进行设置。您应该将您的microservices端点配置为私有,但用于身份验证的端点除外。

您可以添加并进一步澄清您的问题吗?看起来您混合了两个不同的概念,一个是无状态,另一个是不同微服务上的身份验证。@Ricardo我只希望当一个端点从代理调用另一个端点时,每个请求进行一次安全验证。。如果第一个端点是公共的,而第二个端点是私有的,那么我不希望在第二个端点上进行验证,因为第二个端点是私有的。。如果第一个端点是私有的,第二个端点也是私有的,我希望只在第一个端点上进行验证我不知道您的体系结构,但您只能在网关上进行身份验证和授权,并且您的所有微服务都是私有的。我认为我没有正确理解你的怀疑。你最好澄清一下(你拥有什么,你想要什么,还可以分享你当前的架构,因为我认为这更像是一个架构问题而不是代码问题)对不起,没有什么帮助,但谷歌搜索“spring安全微服务”或“spring微服务sso”会得到“有希望的”结果(例如)