我有自定义的身份验证筛选器,它创建PreAuthenticatedAuthenticationToken并将其存储在安全上下文中。过滤器工作良好,它创建具有相应授权权限的令牌“role_user”和“role_adminuser”。这是我的配置:
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
X509AuthenticationFilter filter = new X509AuthenticationFilter()
filter.setAuthenticationManager(authenticationManager())
http.addFilterAfter(filter, SecurityContextPersistenceFilter.class)
http.authorizeRequests().anyRequest().permitAll()
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean()
X509AuthenticationFilter filter = new X509AuthenticationFilter()
filter.setAuthenticationManager(authenticationManager())
registrationBean.setFilter(filter)
registrationBean.setEnabled(false)
return registrationBean
}
我将在SecurityContextPersistenceFilter之前插入过滤器,如:Spring security and custom AuthenticationFilter with Spring Boot所述。
但是,当我试图向controller方法添加预授权注释时,这似乎可以很好地工作,如下所示:
@Controller
@RequestMapping("/security")
class SecurityController {
@RequestMapping("/authenticate")
@PreAuthorize("hasRole('ROLE_user')")
@ResponseBody
ResponseEntity<String> authenticate(HttpServletRequest request, Principal principal) {
println "authenticate: " + SecurityContextHolder.getContext().getAuthentication()
return new ResponseEntity<String>(getPreAuthenticatedPrincipal(request), HttpStatus.OK)
}
我得到一个404错误。如果我注释掉了PreAuthorize注释,方法调用就会正常工作,您可以看到我打印出了身份验证信息,通过身份验证的用户具有ROLE_user和ROLE_adminuser作为其授予的权限。我不确定我做错了什么。
下面是当“preauthorize”被注释掉时,主体中的authorization对象的打印:
authenticate:org.springframework.security.web.authentication.preauthenticatedauthenticationtoken@817a0240:principal:org.springframework.security.ldap.userdetails.ldapuserdetailsimpl@c279eab8:dn:uid=1,ou=people,dc=cdpe,dc=mil;用户名:xxxx@gmail.com;密码:[受保护];已启用:true;AccountNonExpired:true;CredentialsNonExpired:true;AccountNonLocked:true;授予的权限:ROLE_adminuser,ROLE_USER;全权证书:[受保护];已认证:真实;详细信息:org.springframework.security.web.authentication.webauthenticationdetails@957e:RemoteIpAddress:127.0.0.1;SessionID:null;授予的权限:ROLE_adminuser,ROLE_user权限:[ROLE_adminuser,ROLE_user]
更新:我有一点进步。我将proxyTargetClass添加到以下注释中:
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
现在,当我调用我的方法时,我得到了403个禁止返回。我不知道那是怎么回事。
Spring Security配置起来一直很繁琐,唯一万无一失的方法是:
对于X509AuthenticationFilter
的配置,HttpSecurity
javadoc给出了X509
方法,其示例如下(根据您的配置进行了修改-参见javadoc获得原始配置):
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().anyRequest().permitAll()
// Example x509() configuration
.x509();
}
}
方法返回x509configureer
以进行进一步的自定义。
除非你有一个很好的理由去做不同的事情(如果是这样的话,请说出来),我强烈建议你坚持那种方法。
但是在控制器上使用前/后注释实在是一个坏主意,因为在httpsecurity
配置中可以直接完成这些操作。它迫使您使用proxyTargetClass=true
。
我目前正在使用Spring Security开发Spring Boot REST应用程序。我的工作场所使用Auth0(提供用户管理的外部第三方服务)进行身份验证,并已要求我在此应用程序中实现它。身份验证发生在用React编写的前端应用程序中。前端应用程序显示登录表单,并将用户名和密码发送给Auth0,Auth0验证凭据,并在验证用户时返回JWT令牌。 在此之后,前端应用程序将通过头中的JWT令牌从
功能说明 目睹直播提供了一系列的授权观看方式,如密码验证,付费观看等,然而由于客户业务的多样性,实现如:接入客户自身账户体系,登陆OA系统后再跳转到目睹观看直播等一系列更高级的授权观看方式,此时就需要使用自定义授权。 自定义授权逻辑图 功能设置 首先,需在 某个频道 - 频道管理 - 授权观看 - 授权类型 中点击自定义授权,并输入您希望在观众进入观看页时跳转的链接,如: http://your-
技术栈在前端是reactJS,后端由APIGateway和Lambda供电。我正在使用Auth0作为我的react应用程序中的身份服务。通过Auth0提供的一个社交登录进行身份验证时,我会返回、和。此外,我可以使用获取用户信息,例如。现在,我需要保护/阻止对我的后端即APIGateway和lambda的访问。 有很多选项来保护对AWS APIGateway的访问,如IAM授权器、自定义授权器。有一
我正在寻找如何使用以下设置测试Spring Boot REST API的方法: _ _ 我的测试用例: _ 不幸的是,我在测试中得到以下响应: 在请求之后,我还调试了不同的spring过滤器,其中SecurityContext身份验证为null,随后切换为AnonymousAuthenticationToken 我不知道为什么SecurityContext在请求后为null,而不是用@WithCu
我目前正在做一个需要自定义身份验证过程的项目。该应用程序将部署在AWS平台上,我正在考虑使用以下AWS服务,如 API网关 定制授权 EKS 计划是在docker容器中部署所有后端服务,并使用EKS服务进行容器编排过程。所有输入请求都将通过API网关进行验证,并路由到相应的后端服务 我们将通过以下可能的步骤使用自定义授权流程: 我们的应用程序(例如CHILD-APP)将与现有应用程序(例如PARE
null 我尝试将@priority(interceptor.priority.platform_beform)和@prematching也放入我的过滤器中,但即使是在OIDC启动后也会调用。 另外,是否有任何方法支持扩展quarkus oidc逻辑以包括自定义代码? 我无法获得oidc和keycloak-auth拦截器的优先级(知道这些可以帮助我决定过滤器的优先级)。请帮忙。