Spring security spring云安全:通过主体值识别http会话处理中的单个用户?用户名属性的危险设置?
我在spring云安全问题中已经问过这个问题,但可以肯定的是Github不是一个问题追踪者 在SpringCloudSecurity中,web会话/http会话处理如何区分登录用户 在spring security技术概述中,似乎使用了以下原则: 获取有关当前用户的信息 在SecurityContextHolder中,我们存储当前与应用程序交互的主体的详细信息。Spring Security使用身份验证对象来表示此信息 在我们的例子中,原样的keydape,所有用户都是通过keydape注册的,只有电子邮件地址。但是注册页面正在用作First-&Lastname=“noname”的隐藏表单数据 客户端浏览器只知道会话cookie,不知道令牌详细信息。Spring security spring云安全:通过主体值识别http会话处理中的单个用户?用户名属性的危险设置?,spring-security,oauth-2.0,spring-cloud-security,Spring Security,Oauth 2.0,Spring Cloud Security,我在spring云安全问题中已经问过这个问题,但可以肯定的是Github不是一个问题追踪者 在SpringCloudSecurity中,web会话/http会话处理如何区分登录用户 在spring security技术概述中,似乎使用了以下原则: 获取有关当前用户的信息 在SecurityContextHolder中,我们存储当前与应用程序交互的主体的详细信息。Spring Security使用身份验证对象来表示此信息 在我们的例子中,原样的keydape,所有用户都是通过keydape注册的,
网关服务必须处理来自不同用户的客户端请求,并根据其会话cookie将它们传递到后端服务器,由oAuth令牌扩展
这是通过
.map(令牌->WithBeareAuth(交换,令牌))
后端将提取唯一用户ID(sub)以进行进一步处理 如果有多个用户登录,则会启动错误的思考。 但是为什么呢? 使用的网关配置
spring.security.oauth2.client.provider.keydove.user name attribute=name
在application.yaml中:
security:
oauth2:
client:
provider:
keycloak:
user-name-attribute: name
导致最后登录用户的令牌
在网关中用于设置通向后端的den授权承载头
最后,在最后一个登录用户的上下文中完成后端中的所有操作。这不仅仅是一个很好的安全“问题”
在第一步中,将KeyClope中的first-&Lastname更改为唯一值,从而改进了行为
根据此处显示的“主要属性”进行进一步研究后:
如果token属性为null,则默认为sub
——这很有意义
将用户名属性更改为sub
spring.security.oauth2.client.provider.keydove.user name attribute=sub
将userId作为主体名称返回:[49a79b38-2549-4e9a-ab59-c831beea22b1]
最后,我再也无法为并行登录用户获取错误令牌的错误
但我想了解spring security SecurityContextHolder/spring云安全在这里发生了什么
主体有多个条目。一些条目可能相同(名称),一些条目唯一(子条目)。
正确的http会话处理似乎是基于使用的用户名属性值
principal-attribute
OpenID Connect ID Token attribute to populate the UserPrincipal name with. If token attribute is null, defaults to sub. Possible values are:
sub, preferred_username, email, name, nickname, given_name, family_name.