Tag: spring security

可以/应该使用spring security中的每个请求刷新OAuth2令牌

我们使用username-password grant将我们的JS客户端连接到我们的REST服务器。 在某种程度上,oauth / token返回的令牌是我们的会话,因为它允许在有限的时间内访问后端。 每当我们使用令牌向后端发出请求时,我们都想刷新该会话/令牌。 我知道服务器发出了这个刷新令牌,我可以使用它在令牌过期后刷新令牌。 问题是:我不想让客户端负责捕获令牌过期的exception,并在令牌过期之前重新validation或安排刷新。 我希望令牌能够刷新,直到它在有限的时间内不再使用 – 就像会话一样。 (我也不希望它发出每个“数据”请求的刷新请求,虽然我想我记得读过,刷新令牌只有一次…?!) 有没有办法在spring security中做到这一点,还是我必须构建一些自定义的令牌存储实现或我选择的任何部分? 因为我无法找到答案(因此是post)我在想:也许这样做是不明智的,尽管我不明白为什么。 如果我可以窃取令牌,我也可以窃取刷新令牌。 所以我想我真的没有看到首先有一个刷新令牌的重点.. 编辑 为了回应Luke Taylor的回答,我将澄清我们的用例。 我们有一个REST服务器,可以保存人员等应用程序数据。 但也提供访问我们的内容管理,并允许客户发布到Facebook。 它封装了应用程序逻辑和数据存储 我们有一个完全成熟的客户端应用程序,它有自己的安全层,只是通过客户端凭证流访问我们的REST服务器上的数据。 谁可以做客户端决定的事情 我们有几个中小型应用程序,比如facebook上的联系人应用程序,它们也使用客户端凭据访问REST服务器上的数据 我们现在正在开发一个客户端应用程序,它只使用javascript访问REST层来完成大客户端应用程序所做的所有工作,但还需要提供一种方法来validation单个用户并允许多租户。 因此,此新客户端应用程序使用用户名密码授予进行身份validation,并使用方法级别安全性来授权用户 因此,我们有一个REST服务器,需要提供对我们的可信应用程序的完全访问权限,该应用程序执行自己的安全性工作,同一服务器需要为我们的新多租户javascript客户端应用程序的用户提供访问权限。 在生产中,我们将有几个REST服务器,每个服务器都有自己的数据库,但核心总是相同的,所以理论上一个服务器应该能够处理所有。

spring-boot在单个Web应用程序路径上设置基本身份validation?

我试图在我的spring-boot spring基于MVC的应用程序中设置单个路径(/ basic)以进行基本的auth保护。 我只是使用自己的自定义配置参数来配置它,因此用户名和密码只是“admin”和“admin”。 这当前适用于/ basic路径(我被提示并且可以正确登录)。 问题是注销不起作用(我不确定为什么),并且还要求其他路径(如/其他所示)获得基本身份validation凭证(在始终被拒绝之前)。 static class MyApplicationSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers(“/open”).permitAll(); http.authorizeRequests().antMatchers(“/other”).denyAll(); // Block it for now http.authorizeRequests().antMatchers(“/basic”).authenticated().and().httpBasic().and().logout().logoutUrl(“/basic/logout”).invalidateHttpSession(true).logoutSuccessUrl(“/”); } } 我期望/其他人总是被拒绝,但我不明白为什么基本的auth正在为此而努力。 / open按预期工作。 我也不明白为什么/ basic / logout不会让我退出(它也不会产生错误信息)。 我确实有一些简单的代码作为注销端点的占位符,但如果我没有,那么我得到一个404.“home”视图是我的web应用程序root,所以我只想在注销后将用户发送到那里。 @RequestMapping(“/logout”) public ModelAndView logout() { // should be handled by spring security return new ModelAndView(“home”); } […]

Spring安全无状态配置

我试图通过遵循文档来实现Spring的无状态身份validation, http://static.springsource.org/spring-security/site/docs/3.1.x/reference/security-filter-chain.html#filter-chains -with-NS 所以在我的spring-security.xml中,我有 当我使用浏览器对其进行测试时,需要对第一个请求进行身份validation。 但随后不是。 根据我的理解,我应该看到用户登录提示。 有什么我想念的吗?

我可以在应用程序中实现SAML和基本弹簧安全性吗?

我需要我们的应用程序,我们需要在我们的应用程序中实现Spring SAML,以便为一个客户启用联合SSO。 但是,我们需要使用spring-security为其他客户维护现有的登录流程。 所以我的问题是我们可以为Web应用程序提供两种安全机制,以便将其视为多租户。 我可以在同一个应用程序中实现OAuth和SAML。 提前致谢..

Spring Security:会话到期而没有重定向到expired-url?

我正在使用基于Spring Security 3.0.2表单的身份validation。 但我无法弄清楚如何配置它以便当会话到期时请求不会重定向到其他页面(expired-url)或显示“会话过期”消息。 我不想要任何重定向或消息,我希望匿名会话启动就像没有会话的用户进入网站时一样。 我目前的配置:

如何使用Spring Security在用户初始登录时强制更改密码

在用户使用Spring Security初次登录时,实现强制密码更改的最佳方式是什么? 我尝试实现这里提到的自定义AuthenticationSuccessHandler ,但正如rodrigoap所提到的,如果用户在地址栏手动输入URL,即使用户没有更改密码,用户仍然可以继续访问该页面。 我用filterForceChangePasswordFilter做了这个。 因为如果用户手动键入url,他们可以绕过更改密码表单。 使用filter,请求始终被截获。 因此,我继续实施自定义filter。 我的问题是,当我实现自定义filter并在其中发送重定向时,它会再次通过filter,从而导致无限重定向循环,如此处所述。 我尝试通过在security-context.xml中声明两个http标签来实现所提到的解决方案,第一个标签具有pattern属性,但它仍然通过我的自定义filter: … … 我当前的实现(有效)是: 在我的自定义身份validation成功处理程序中,我设置了一个会话属性isFirstLogin 在我的ForcePasswordChangeFilter中,我检查是否设置了会话isFirstLogin 如果是,那么我发送重定向到我的强制密码更改 否则,我调用chain.doFilter() 我对此实现的问题是访问我的资源文件夹也会通过此filter导致我的页面失真(因为* .js和* .css未成功检索)。 这就是我在我的安全应用程序context.xml中尝试使用两个标记的原因(这不起作用)。 因此,如果servletPath启动或包含“/ resources”,我最终必须手动过滤请求。 我不希望它像这样 – 必须手动过滤请求路径 – 但现在它就是我拥有的。 这样做的优雅方式是什么?

春季MVC中的CSRF(跨站点请求伪造)保护

我在spring的CSRF(跨站点请求伪造)保护中很少混淆。 不,我有我的jsp和我的控制器和一个Web服务。 我想要做的是在Web服务级别validation令牌,如果令牌匹配,则运行Web服务(在我的情况下执行数据库插入) JSP文件 我也插入了隐藏的标签。 现在我该怎么做才能validation这个令牌。 我在那里迷路了。 在控制器类中,我获取从表单到对象的值,并调用Web ervise来保存数据 @RequestMapping(method = RequestMethod.POST) public String processForm(@ModelAttribute(value = “userForm”) @Valid UserForm userForm, BindingResult result, ModelMap model) { //call the web service }

@EnableWebSecurity在spring有什么用处

按照春季文档 将此批注添加到@Configuration类,以便在任何WebSecurityConfigurer定义Spring Security配置,或者更有可能通过扩展WebSecurityConfigurerAdapter基类并覆盖单个方法: 或者正如@EnableWebSecurity描述的那样,用于在我们的项目中启用SpringSecurity。 但我的问题是,即使我没有用@EnableWebSecurity注释我的任何类,仍然是应用程序提示输入用户名和密码。(默认行为) 所以我在@EnableWebSecurity和没有@EnableWebSecurity情况下收到了同样的行为。 有人可以解释这个注释究竟是什么?

Spring Security:如果身份validation失败,则重定向到登录页面

我们有两种登录方式。 用户名和密码由请求标头中的另一个应用程序发送。 检查IT,如果用户名和密码正确,则进入。[为此编写自定义filter] 如果请求标头中不存在用户名和密码,则会显示登录屏幕。 当用户名和密码出现在请求标头中且错误时,我会看到HTTP状态401 – 身份validation失败:错误的凭据页面。 如果身份validation失败,如何让它显示登录页面。 下面是security.xml中的代码 如果您需要更多信息,请与我们联系。 编辑:在我的应用程序中添加RequestHeaderfilter的代码 public class RequestHeaderProcessingFilter extends AbstractAuthenticationProcessingFilter{ private String usernameHeader = “j_username”; private String passwordHeader = “j_password”; protected RequestHeaderProcessingFilter() { super(“/login_direct”); } //getters and setters @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { String username = request.getHeader(usernameHeader); String password = request.getHeader(passwordHeader); SignedUsernamePasswordAuthenticationToken […]

Spring安全性返回String作为主体而不是登录失败时的UserDetails?

要么我错过了什么,要么它是如何工作的…… 也就是说,我实现了UserDetailsService和子类(下面的AppUser )spring实用程序类User (实现UserDetails )。 如果重要,它会是这样的: @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // try loading user by its name SystemUser user = null; try { user = this.sysUserService.getByUsername(username); if(user == null) throw new UsernameNotFoundException(“User not found!”); } catch(Exception e) { throw new DataRetrievalFailureException( “Could not load user with username: ” + username); } […]