问题标签 [spring-cloud-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
305 浏览

spring-security - Zuul Gateway 通过 Eureka Server 启动时出现未经授权的异常

我正在将 Spring Boot 从 1.5.12 迁移到 2.1.14。我们还必须迁移 Spring Cloud 依赖项。因此,为此我将 Spring cloud 版本从“Dalston.SR4”更改为“Greenwich.SR4”(Spring Boot 2.1.x 支持的版本)。

我有 Eureka Server 和 Zuul GateWay Application,它是微服务之一,将充当代理和 eureka 客户端,如下所示

我们将 Spring Security 与 Oauth2 集成在一起,并拥有如下所示的授权服务器和资源服务器。

除了这些 MS,我还有其他一些微服务。当我启动作为 Eureka 服务器的 EurekaRegistry 应用程序时,我们没有错误并且能够成功启动它们。但是我们在运行 Zull Gateway 微服务时遇到问题,这会出现以下错误,要求授权。

注意:这里我们没有尝试向我们的 Eureka 服务器注册 Eureka Clients。尝试通过 Zuul 网关访问其他微服务并使用属性禁用安全性:security.enabled=false。迁移之前 security.basic.enabled=false。我们尝试使用不同的组合尽可能禁用安全性,但仍然出现上述错误。

有人可以告诉我可能是什么问题。

提前致谢。

0 投票
1 回答
764 浏览

spring-boot - Spring starter security or spring cloud security 如何保护整个微服务架构?

目前在进行开发人员培训,我正在从事一个春季的个人项目。我 6 个月前开始使用 java,所以有一个我还没有掌握的概念。我的教练根本不懂弹簧,所以他帮不了我。我也是法国人,关于 spring 的可靠文档很少(它正在迅速发展)。例如,我学习了一篇关于微服务的法语教程,并在春季维护它们时使用了功能区和 zuul 代理。我从头开始(新项目)在反应式 webflux 中重新编码

我有几个关于 spring starter security 或 spring cloud security

  • Spring Cloud 配置(与 gitlab 相关)
  • 尤里卡服务器
  • 管理服务器
  • 网关
  • 2 业务微服务
  • 2个子模块(模型和存储库)

我希望我的所有微服务和内部微服务(eureka、管理服务器、配置服务器)现在都是安全的。但是我不知道怎么做。

我希望咨询 config-server 的微服务能够识别自己,并且我还希望微服务网关能够识别自己以向其他微服务发出请求。最后,我希望我的所有微服务都受到保护。

我们应该把 spring-starter-security 放在微服务中吗?我们是否应该使用 spring-cloug-security 创建一个新的微服务?我们是否应该创建一个新的 spring-cloud-security 微服务并到处添加 spring-start-security ?

https://cloud.spring.io/spring-cloud-security/2.2.x/reference/html/ 显然我发现这个链接不是很解释

谢谢

0 投票
1 回答
250 浏览

java - 如何使用 AbstractPreAuthenticatedProcessingFilter 覆盖 AuthenticationFailure 的响应正文?

我正在使用自定义过滤器来发出请求身份验证。配置AutheticationFailureHandler,我想把消息错误内容,但它附加到现有的默认内容,我的目标是放在同一个正文上或只是一个新的。

处理程序实现:

回复正文:

如图所示,这将返回两个 JSON 内容。我如何设置一个或附加到存在?

整个代码:

配置:

0 投票
2 回答
8415 浏览

java - 如何使用 Spring Cloud Gateway 自定义过滤器过滤每个请求?

这是我第一次实施 Spring Cloud Gateway。

我需要过滤每个请求并在某些路径上应用过滤器验证。按照 Baeldung 自定义过滤器教程,我制作了一个简单的应用程序来过滤请求。

应用程序必须发布类似的路径/actuator/health并验证后端服务的特定路径。到目前为止,我已经实现了 aGlobalFilter和 a GatewayFilterFactory。每个请求都会调用全局过滤器,但在应用程序启动时只调用一次 GatewayFilter,这样我就无法为每个请求创建身份验证逻辑。auth 逻辑是关于一个特定的头字段。所以,我的粒度问题是:

  1. 如何使用特定路径验证每个请求?
  2. 如何拒绝请求并发送错误消息?

全局过滤器

网关过滤器

应用程序.yml

过滤器的示例路径:https://backend-url:443/api/service1

0 投票
0 回答
223 浏览

java - 为 Spring Cloud 配置 maven 依赖项

我想使用spring-cloud-starter-parent. 我尝试了这个 POM 配置:

Github代码

为了配置 spring cloud 项目我需要使用哪些依赖项以及我必须将哪些依赖项替换到现有项目中?

目前我得到Cannot resolve method 'authenticated' in 'RequestMatcherConfigurer'这可能导致错误的 Maven 依赖项。

我正在尝试这种配置:

0 投票
2 回答
835 浏览

spring-security-oauth2 - OAuth2 与多个网关实例共享主体对象

我已经将 Spring Cloud Gateway 与 OAuth2 服务器集成在一起。它适用于单实例网关。这是我的安全配置。

但是,当我将网关扩展到 2 个实例时,一些请求可以正常工作,但是一些请求返回 401。

当我登录网关的第一个实例时,主体对象已成功创建并将会话分配给 redis。如果下一个请求到达第二个实例,它会返回 401,因为它没有主体。

我怎么解决这个问题?

ps:我正在使用redis进行Web会话,以共享网关之间的会话信息。

0 投票
1 回答
502 浏览

spring-boot - JwtAccessTokenConverter:无法从 verifierKey 创建 RSA 验证程序

我有一个使用 Spring Cloud OAuth2 的授权服务器 Spring Boot 项目。我将这些 bean 用于 JWT:

登录显然工作正常,但是当我运行项目时,我收到了这个警告:

我如何摆脱这个警告?

0 投票
0 回答
142 浏览

spring-boot - 如何在 SecurityWebFilterChain bean 中获取 ServerWebExchange 对象

您好 Spring WebFlux 社区,我已经使用以下代码在 spring webflux 安全 bean 中实现了基于 x509 的身份验证:

现在,请注意 auth0 lambda 中的注释部分,我需要访问当前请求的标头值。我怎么能得到那个?

0 投票
0 回答
48 浏览

spring-security - 如何在 TokenEnhancer 中获取刷新令牌的全部信息?

我想将刷新令牌值放入访问令牌中。我尝试如下:

accessToken.getRefreshToken() only get refresh token jti like '860df329-4f44-4d38-9bc7-817b1cda47a2' but not the token encoded value like 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteV9yZWZyZXNoX3Rva2VuIjoiODYwZGYzMjktNGY0NC00ZDM4LTliYzctODE3YjFjZGE0N2EyIiwidXNlcl9uYW1lIjoicmFuZHkiLCJzY29wZSI6WyJhbGwiXSwiZXhwIjoxNjE1MzQxMjY0LCJhdXRob3JpdGllcyI6WyIxMTAiLCIxMDAiLCIxMTEiLCJST0xFX3N1cGVyQWRtaW4iXSwianRpIjoiOTM0ZjA1MGYtZDU1Yi00NDg3LTkyNDgtNmViM2QzMjIxNTg4IiwiY2xpZW50X2lkIjoid2ViIiwiZW5oYW5jZSI6ImVuaGFuY2UgaW5mbyJ9.gJ_VJx8COMXTMr5usR9uBrZDPvpoocGOTtDB8sWvEy8'

任何人都知道如何获得刷新令牌编码值?

0 投票
0 回答
96 浏览

spring-security - spring-cloud-security:通过主体值识别http会话处理中的单个用户?用户名属性的危险设置?

我已经在 spring-cloud-security issue #175中问过这个问题,但可以肯定的是 Github 不是问题跟踪器。;-)

spring-cloud-security 中的 web session / http session 处理如何区分已登录的用户?

在 spring-security 技术概述6.2.1 SecurityContextHolder、SecurityContext 和 Authentication Objects中似乎使用了主体:

获取当前用户信息

在 SecurityContextHolder 中,我们存储了当前与应用程序交互的主体的详细信息。Spring Security 使用 Authentication 对象来表示此信息。

在我们的例子中,AS 是 Keycloak,所有用户都是通过 Keycloak 注册的,只有电子邮件地址。但是注册页面被用作 First- & Lastname = "noname" 的隐藏表单数据。

客户端浏览器只知道会话 cookie,不知道令牌详细信息。
网关服务必须处理来自不同用户的客户端请求,并根据其会话 cookie 将它们传递给后端服务器,由 oAuth 令牌扩展
这是通过.map(token -> withBearerAuth(exchange, token))
后端将提取唯一的 userId (sub) 以进行进一步处理.

如果有多个用户登录,就会产生不好的想法。但是为什么呢?application.yaml 中使用的网关配置 spring.security.oauth2.client.provider.keycloak.user-name-attribute=name

导致在token网关中使用最后登录用户的身份向后端设置 den Authorization Bearer Header。

最后,后端中的所有操作都是在最后一个登录用户的上下文中完成的。这不仅仅是一个很好的安全“问题”。

在将 Keycloak 中的 First- 和 Lastname 更改为唯一值的第一步中,它改进了行为。

经过一些基于此处显示的“主要属性”的更多研究:https ://www.keycloak.org/docs/latest/securing_apps/#_java_adapter_config

If token attribute is null, defaults to sub- 那讲得通!

将 user-name-attribute 更改为 sub spring.security.oauth2.client.provider.keycloak.user-name-attribute=sub 将 userId 作为主体名称返回:[49a79b38-2549-4e9a-ab59-c831beea22b1]

最后,我不再能够为并行登录的用户收到错误令牌的错误。

但我想了解 spring-security SecurityContextHolder / spring-cloud-security 这里发生了什么。

校长有几个条目。有些可能是相同的(名称),有些是唯一的(子)。并且正确的 http 会话处理似乎基于使用的用户名属性值?