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