2
在我的应用程序中,我实现了oauth2
AuthorizationServer和ResourceServer。我系统中的每个用户都有一组他的角色(权限)。REST API,oAuth2,弹簧安全和角色
我想用oauth2和基于用户角色的安全保护我的Spring MVC REST端点。
是否有可能使用在UserDetails.getAuthorities()方法中定义的不同角色(权限)来使用oAuth2认证/授权?
我CONFIGS:
private final static class DBUserDetails extends User implements UserDetails {
private static final long serialVersionUID = 1L;
private DBUserDetails(User user) {
super(user);
}
public Collection<? extends GrantedAuthority> getAuthorities() {
return AuthorityUtils.createAuthorityList("ROLE_USER");
}
public String getUsername() {
return getName();
}
public boolean isAccountNonExpired() {
return true;
}
public boolean isAccountNonLocked() {
return true;
}
public boolean isCredentialsNonExpired() {
return true;
}
public boolean isEnabled() {
return true;
}
}
和
@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources
.resourceId(RESOURCE_ID);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/profile/*").hasRole("PERMISSION_ADMIN")
.and().csrf()
.disable().sessionManagement().sessionCreationPolicy(STATELESS);
}
}
@RestController
@RequestMapping("/api/v1.0/profile")
public class ProfileController {
@PreAuthorize("hasRole('PERMISSION_ADMIN')")
@RequestMapping("/currentUser")
public User currentUser(@AuthenticationPrincipal User user) {
return user;
}
}
我想,以确保与用户谁拥有PERMISSION_ADMIN
/profile/*
路径。但现在,任何具有accessToken的人都可以访问此端点。我错在哪里?
谢谢,会尝试在附近的几个小时!有没有机会以相同的方式从注释中使用这些方法? – alexanoid 2015-03-19 15:28:46
@alexanoid老实说,我没有尝试。要调查的好点 – 2015-03-19 15:37:09
这不起作用。没有方法#oauth2.hasRole。正确的方法只是hasRole:.antMatchers(“/ oauth/api”)。access(“hasRole('ADMIN')”) – 2017-03-16 22:35:13