我一直在尝试使用Dave Syer的指南来实现OAuth2身份验证服务器,并从JHipster获得一些启发。但是我无法弄清楚它们如何协同工作。
当我使用ResourceServerConfigurerAdapter时,使用WebSecurityConfigurerAdapter的安全设置似乎被覆盖。
@Configuration
@EnableResourceServer
public class OAuth2ResourceConfig extends ResourceServerConfigurerAdapter {
private TokenExtractor tokenExtractor = new BearerTokenExtractor();
@Override
public void configure(HttpSecurity http) throws Exception {
http
.addFilterAfter(contextClearer(), AbstractPreAuthenticatedProcessingFilter.class)
.authorizeRequests()
.anyRequest().authenticated().and().httpBasic();
}
private OncePerRequestFilter contextClearer() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
if (tokenExtractor.extract(request) == null) {
SecurityContextHolder.clearContext();
}
filterChain.doFilter(request, response);
}
};
}
@Component
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
private final AuthenticationManager authenticationManager;
@Autowired
public CustomWebSecurityConfigurerAdapter(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.parentAuthenticationManager(authenticationManager);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginPage("/login").permitAll()
.and()
.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.and()
.requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
.and()
.authorizeRequests().anyRequest().authenticated();
}
}
这是摘自几个不同示例的代码,因此它们可能混合得不好。但是我找不到OAuth2的良好文档/示例列表(不同于Spring Boot的文档很棒),因此我在理解它们如何组合方面遇到了问题。如果我不将loginForm添加到ResourceServerConfigurerAdapter,它将给我未授权的权限。但是我在WebSecurityConfigurererAdapter中将其定义为allowAll()。
这是AuthorizationServerConfigurerAdapter:
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private JwtAccessTokenConverter jwtAccessTokenConverter;
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("acme")
.secret("acmesecret")
.authorizedGrantTypes("authorization_code", "refresh_token",
"password").scopes("openid");
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager).accessTokenConverter(jwtAccessTokenConverter);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
}
}
我做错了什么吗?我必须在ResourceServerConfigurerAdapter中设置所有安全性吗?我什至不需要WebSecurityConfigurerAdapter吗?
如果有人知道任何指南,教程,博客或其他类似内容,可能会帮助我确定其工作原理,将不胜感激。
你需要WebSecurityConfigurerAdapter
保护/ authorize端点的安全并为用户提供身份验证的方法。一个Spring Boot应用程序会为你做到这一点(通过添加自己WebSecurityConfigurerAdapter
的HTTP基本身份验证)。默认情况下,它将创建一个order = 0的过滤器链,并保护所有资源,除非你提供请求匹配器。@EnableResourceServer
功能类似,但默认情况下添加的过滤器链为order = 3。WebSecurityConfigurerAdapter
有一个@Order(100)注释。因此,首先将对ResourceServer进行检查(身份验证),然后对WebSecurityConfigureAdapter的扩展名进行检查。
我一直试图使用Dave Syer的指南实现一个OAuth2身份验证服务器,并从Jhipster获得一些启发。但我不知道这一切是怎么一起工作的。 使用ResourceServerConfigurerAdapter时,使用WebSecurityConfigurerAdapter的安全设置似乎被覆盖。 这是取自几个不同示例的代码,所以它们可能不能很好地混合在一起。但是我找不到一个好的OAuth2文档/示
基本思想是用户会话应该很长,并且根据用户活动继续/禁用。然而,由于我们不能撤销令牌,所以令牌应该是短期的,比如15分钟。如果我们可以在令牌过期后刷新令牌,那么用户会话可以继续。 经过一些研究,我发现有两种实现: 一个用于刷新过期,一个用于令牌过期。刷新TTL比令牌到期TTL长。如果客户端发现当前令牌已过期但仍可以刷新,则将调用服务器刷新api。新令牌将有新的到期时间和刷新到期时间。如果两个TTL都
安全性设定 调整PSP™安全性的加密设定。 变更密码 视听年龄限制 网络浏览接口启动限制
问题内容: 我有两个SQL查询,其中每次调用时我都尝试用+1和-1分别更新和值。 第一个查询: 第二查询 因为与我交换而在第二次注射查询中有任何威胁吗? 问题答案: 不,第二个查询与第一个查询一样安全,因为它已完全参数化,因此没有提供外部数据可以通过其输入SQL查询本身文本的路径。该表达式是由RDBMS计算的,而不是由程序*计算的,因此它不能提供将新代码注入现有SQL的机会。 *,并且随后不会提供
问题内容: 用户可以控制的任何变量,攻击者也可以控制,因此是攻击的源头。这称为“污染”变量,并且不安全。 使用时,可以控制许多变量。,,,和许多其它的是由客户端发送的HTTP请求报头的一部分。 有人知道“安全列表”或变量列表吗? 问题答案: 就没有这样的“安全”或“不安全”值。只有服务器控制的值和用户控制的值,您需要知道值的来源,因此是否可以出于特定目的信任该值。例如,将其存储在数据库中是完全安全
在过去的三天里,我一直在学习生命周期主题,现在它们对我来说开始有意义了。然而,我做了很多实验,但没有设法以一种会导致运行时不安全行为的方式指定生命周期,因为编译器似乎足够聪明,可以通过不编译来防止此类情况。因此我有以下问题链: Rust编译器会抓住每一个使用不安全生命周期说明符的情况,这是真的吗? 如果是的话,那么为什么Rust需要手动指定生命周期,而它可以通过推断不安全的场景来自行指定生命周期?