gpt4 book ai didi

spring-boot - 如何使用 Spring Security 在 Spring Boot 应用程序中配置 RSocket 安全性

转载 作者:行者123 更新时间:2023-12-04 02:43:36 27 4
gpt4 key购买 nike

对于微服务到微服务的通信,RSocket 似乎是 HTTP/S 的一个很好的替代品。幸运的是,Spring Boot 已经顺利集成,简化了它的配置。

但是,在 RSocket 和 Spring(引导、安全)文档中,我缺少与 RSocket 安全相关的所有信息。

我的问题是:

1) 我们如何配置 RSocket 以使用 TLS(在 Spring Boot 应用程序的上下文中)?

2) Spring Security 是否为 RSocket 安全添加了任何附加功能?我想到的事情是,假设我们想要将 JWT token 从一个应用程序传播到另一个应用程序,它如何通过 RSocket 传递和验证?

最佳答案

我最近写了一个post关于如何将 Spring Security 基本身份验证与 RSocket 结合使用。对于您的第一个问题,您可以在连接到 RSocketServer 时使用 TcpClientTransport.create(TcpClient.create().port(7000).secure())

RSocketRequester.builder()
.dataMimeType(MimeTypeUtils.APPLICATION_JSON)
.rsocketStrategies(rSocketStrategies)
.rsocketFactory(clientRSocketFactory -> {
clientRSocketFactory.frameDecoder(PayloadDecoder.ZERO_COPY);
})
.setupMetadata(credentials, UsernamePasswordMetadata.BASIC_AUTHENTICATION_MIME_TYPE)
.connect(TcpClientTransport.create(TcpClient.create().port(7000).secure()))
.block();

对于第二个问题,当访问 RSocket 消息端点时,您可以使用

        BearerTokenMetadata credentials = new BearerTokenMetadata("jwt-token");
return rSocketRequester
.route("taxis")
.metadata(credentials, BearerTokenMetadata.BEARER_AUTHENTICATION_MIME_TYPE)
.data(new TaxisRequest(type, from, to))
.retrieveMono(TaxisResponse.class);

PayloadSocketAcceptorInterceptor 的 RSocketServer 设置期间,您可以使用 jwt,如下所示。

    @Bean
public PayloadSocketAcceptorInterceptor rsocketInterceptor(RSocketSecurity rsocket) {
rsocket.authorizePayload(authorize -> {
authorize
// must have ROLE_SETUP to make connection
.setup().hasRole("SETUP")
// must have ROLE_ADMIN for routes starting with "taxis."
.route("taxis*").hasRole("ADMIN")
// any other request must be authenticated for
.anyRequest().authenticated();
})
.jwt(Customizer.withDefaults());

return rsocket.build();
}

关于spring-boot - 如何使用 Spring Security 在 Spring Boot 应用程序中配置 RSocket 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58130652/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com