Tag: spring security

如何强制Spring Security更新XSRF-TOKEN cookie?

Spring Boot应用程序中的REST Spring Security /user服务无法在用户进行身份validation时立即更新XSRF-TOKEN cookie。 这导致/any-other-REST-service-url的下一个请求返回Invalid CSRF certificate错误,直到再次调用/user服务。 如何解决此问题,以便REST /user服务在首先validation用户的同一请求/响应事务中正确更新XSRF-TOKEN cookie? 后端REST /user服务由前端应用程序调用三次,但/user服务仅在第一次和第三次调用时返回匹配的JSESSIONID/XSRF-TOKEN cookie,而不是在第二次调用时返回。 在对服务器的第一个请求中,没有凭证(没有用户名或密码)发送到/ url模式,我认为调用/user服务,服务器响应JSESSIONID和XSRF-TOKEN它与匿名关联用户。 FireFox开发人员工具的“网络”选项卡将这些cookie显示为: Response cookies: JSESSIONID:”D89FF3AD2ACA7007D927872C11007BCF” path:”/” httpOnly:true XSRF-TOKEN:”67acdc7f-5127-4ea2-9a7b-831e95957789″ path:”/” 然后,用户可以无错误地对公共可访问资源发出各种请求,FireFox开发人员工具的“网络”选项卡显示这些相同的cookie值。 对/user服务的第二个请求是通过登录表单完成的,该表单发送有效的用户名和密码, /user服务使用该用户名和密码来validation用户。 但/user服务仅返回更新的jsessionid cookie,并且不会在此步骤中更新xsrf-token cookie。 以下是此时FireFox开发人员工具的“网络”选项卡中显示的Cookie: 200 GET user在FireFox的“网络”选项卡中包含以下Cookie: Response cookies: JSESSIONID:”5D3B51A03B9AE218586591E67C53FB89″ path:”/” httpOnly:true AUTH1:”yes” Request cookies: JSESSIONID:”D89FF3AD2ACA7007D927872C11007BCF” XSRF-TOKEN:”67acdc7f-5127-4ea2-9a7b-831e95957789″ 请注意,响应包含新的JSESSIONID ,但未包含新的XSRF-TOKEN 。 这导致不匹配导致对其他rest服务的后续请求中的403错误(由于无效的csrf令牌),直到通过对/user服务的第三次调用解决此问题。 有没有办法我们可以强制前面的200 get user也返回新的XSRF-TOKEN ? 对后端REST /user服务的第三次调用使用与上面显示的第二个请求中使用的用户名和密码相同的凭据,但第三次调用/user导致XSRF_TOKEN […]

Spring SAML握手失败 – 无法针对可信密钥validation不受信任的凭据

我正在使用Spring Security SAML扩展与ACA医疗保健(aka Obamacare)网站集成。 它使用IDP启动的SSO。 SAML握手失败,输出如下 org.opensaml.xml.security.keyinfo.provider.InlineX509DataProvider] Single certificate was present, treating as end-entity certificate org.opensaml.xml.security.keyinfo.BasicProviderKeyInfoCredentialResolver] Credentials successfully extracted from child {http://www.w3.org/2000/09/xmldsig#}X509Data by provider org.opensaml.xml.security.keyinfo.provider.InlineX509DataProvider org.opensaml.xml.security.keyinfo.BasicProviderKeyInfoCredentialResolver] A total of 1 credentials were resolved org.opensaml.xml.security.credential.criteria.EvaluableCredentialCriteriaRegistry] Registry could not locate evaluable criteria for criteria class org.opensaml.xml.security.keyinfo.KeyInfoCriteria org.opensaml.xml.signature.SignatureValidator] Attempting to validate signature using key from supplied credential org.opensaml.xml.signature.SignatureValidator] […]

手动validation使用弹簧安全性

我正在使用spring security并且工作正常,但是现在我想手动启动安全过程,对客户端进行更改我需要在控制器中获取用户名和密码(表单不会直接调用“j_spring_security_check”) 我想到了两个选项,我有一些问题: 在我获取参数并执行某些操作后,我将向j_spring_security_check url发送一个发布请求。 我的代码: public void test(loginDTO loginDTO){ MultiValueMap body = new LinkedMultiValueMap(); HttpHeaders headers = new HttpHeaders(); body.add( “j_username”, loginDTO.getJ_username()); body.add( “j_password”, loginDTO.getJ_password()); HttpEntity httpEntity = new HttpEntity( body, headers); headers.add( “Accept”, MediaType.APPLICATION_JSON_VALUE); restTemplate.exchange( “http://localhost:8080/XXX/j_spring_security_check”, HttpMethod.POST, httpEntity, HttpServletResponse.class); } 这不起作用,我得到:500内部服务器错误为什么? 第二种选择 – 我做了以下事情: public void test2(loginDTO loginDTO, HttpServletRequest request) { UsernamePasswordAuthenticationToken token […]

适用于多个用户的Spring websocket安全性

我想在spring应用程序中使用websocket来处理联系请求。 我已经为用户设置了登录页面,我使用了spring security。 我的问题如下:如何安全地向两个不同的用户发送Web套接字消息。 我知道我可以使用@SendTo()向每个订阅某个主题的用户广播消息,并且只能通过类似的方式向一个用户广播消息 messagingTemplate .convertAndSendToUser(principal.getName(), “/queue/requests”, request); 因为他的用户名存储在本金中。 我的问题是如何处理我们必须从请求中定位2个用户并使其安全,以便您无法在未经授权的情况下从客户端收听任何渠道。 理想情况下,我正在寻找类似的东西 messagingTemplate .convertAndSendToUser(request.getFromUser(), “/queue/requests”, request) messagingTemplate .convertAndSendToUser(request.getToUser(), “/queue/requests”, request)

Spring LDAP和Spring Boot配置

我有教育问题: 有一个带有用户及其密码的Windows Server 2003(AD)虚拟机。 建立与机器的连接(IP:192.168.56.101:389)。 Web应用程序的目的是使用户能够在AD中更改其密码。 问题:无法配置与windws server 2003的连接。 我从本教程开始https://spring.io/guides/gs/authenticating-ldap/ 当我尝试以“杰克伍德”登录并通过“1234”时,我收到了错误消息。 org.springframework.security.authentication.InternalAuthenticationServiceException: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 1 – 00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece ]; remaining name ‘cn=Jack Wood,cn=Users’ 请检查application.properties […]

具有身份validation的Spring Boot项目结构

我正在学习Spring启动及其模块,但我希望避免学习不良实践。 那么你能告诉我通常使用什么项目结构吗? 我正在使用这个结构: com +- example +- myproject +- Application.java | +- config | +- CustomSecurityConfig.java (extends WebSecurityConfigurerAdapter) | +- domain | +- Customer.java | +- repository | +- CustomerRepository.java | +- service | +- CustomerService.java | +- web +- CustomerController.java 现在我需要实现JWT身份validation,所以我有了新的类: 用于安全filter链的CustomAuthFilter.java AuthenticationManager的CustomUserDetailsS​​ervice.java CustomEntryPoint.java用于处理exception 用于管理jwt令牌的CustomJwtService.java 用于其他端点的CustomAuthController.java,如/ login,/ logout,/ create-user,/ reset-password 你能告诉我这个class的哪个店吗? 我有两个想法: 创建安全文件夹并将其放在一起 将文件拆分为现有文件夹,如:CustomAuthFilter.java […]

使用Spring Security登录后如何做某事?

我有一个Spring Web应用程序,它使用Spring SAML和Spring Security来管理登录过程。 现在我需要在正确登录后执行一些任务。 特别是我必须在SecurityContext.getContext()对象中存储一些数据。 我从未使用过Spring Security / SAML,我不知道它是如何管理IdP的回报的。 代码中是否有任何地方通常可以在登录过程正确结束后放置代码? 我的意思是,我知道重定向页面的设置位置,但是我无法将自定义代码放在此重定向页面的Controller中,因为该页面被访问了一次以上,我需要在登录时只运行一次自定义代码。

Spring安全删除用户 – 会话仍处于活动状态

我有一个简单的Spring安全应用程序和用户管理。 管理员应该能够在数据库上创建/更新/删除用户(通过hibernate)。 如果用户已更新,我正在重新加载当前登录的用户的身份validation。这是通过以下代码完成的(根据此示例): SecurityContextHolder.getContext().setAuthentication(updatedAuthentication); 我的问题是: 如果删除用户该怎么办? 如果我删除了一个用户,那么已经活动的会话仍处于活动状态 ,我不知道如何更新它们。 我仍然可以导航到我以前能够访问的每个页面。 有没有办法告诉spring会话应该重新validation还是类似的? 我错过了什么重要的事吗?

用于Spring Security和/或Spring BlazeDS集成的会话管理(和查杀)的集中系统

我很难实现客户要求的function。 简而言之,他们希望能够通过管理员方面退出他们选择的任何客户。 该应用程序使用Flex作为前端技术并通过AMF访问服务器。 服务器端使用Spring Security和Spring BlazeDS Integration。 基本上问题是:Spring Security和/或Spring BlazeDS Integration是否为开箱即用的会话管理(和查杀)提供了任何集中式系统? 出于概念validation的目的,我尝试注销所有用户并使用以下代码终止所有会话: package xxx.xxx.xxx; import java.util.List; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.session.SessionInformation; import org.springframework.security.core.session.SessionRegistry; import org.springframework.security.core.userdetails.User; import flex.messaging.MessageBroker; import flex.messaging.security.LoginCommand; public class SessionServiceImpl { private static final Log log = LogFactory.getLog(SessionServiceImpl.class); private SessionRegistry sessionRegistry; private MessageBroker messageBroker; public SessionRegistry […]

对会话使用sessionRegistry没有会话数限制?

使用 @Autovired SessionRegistry sessionRegistry 在我的代码中,我添加了以下配置: http.sessionManagement() .maximumSessions(1) .sessionRegistry(sessionRegistry()); 但我不想限制最多会话。 我能实现吗?