я после основного примера Spring загрузки oauth2 от Dave Syer: https://github.com/dsyer/sparklr-boot/blob/master/src/main/java/demo/Application.javaКак получить Весна загрузки и пример OAuth2 использовать другие грантовые пароль полномочия, чем по умолчанию
@Configuration
@ComponentScan
@EnableAutoConfiguration
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@RequestMapping("/")
public String home() {
return "Hello World";
}
@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
// Just for laughs, apply OAuth protection to only 2 resources
.requestMatchers().antMatchers("/","/admin/beans").and()
.authorizeRequests()
.anyRequest().access("#oauth2.hasScope('read')");
// @formatter:on
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.resourceId("sparklr");
}
}
@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager);
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
// @formatter:off
clients.inMemory()
.withClient("my-trusted-client")
.authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
.scopes("read", "write", "trust")
.resourceIds("sparklr")
.accessTokenValiditySeconds(60)
.and()
.withClient("my-client-with-registered-redirect")
.authorizedGrantTypes("authorization_code")
.authorities("ROLE_CLIENT")
.scopes("read", "trust")
.resourceIds("sparklr")
.redirectUris("http://anywhere?key=value")
.and()
.withClient("my-client-with-secret")
.authorizedGrantTypes("client_credentials", "password")
.authorities("ROLE_CLIENT")
.scopes("read")
.resourceIds("sparklr")
.secret("secret");
// @formatter:on
}
}
}
Пример очень хорошо работает для обоих типов грантов, но в случае с паролем используется пользователь безопасности по умолчанию Spring Boot (тот, который отключен эхом «Использовать пароль безопасности по умолчанию: 927ca0a0-634a-4671-bd1c-1323a866618a» во время запуска).
Вопрос в том, как вы переопределяете учетную запись пользователя по умолчанию и на самом деле полагаетесь на WebSecurityConfig? Я добавил раздел как это:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
protected static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder authManagerBuilder)
throws Exception {
authManagerBuilder.inMemoryAuthentication().withUser("user")
.password("password").roles("USER");
}
}
Но не похоже, чтобы переопределить Spring по умолчанию пользователя/пароль, даже если документация предполагает, что он должен.
Что мне не хватает, чтобы получить эту работу?
Нет, это не должно не, если вы добавите '@Order (SecurityProperties.ACCESS_OVERRIDE_ORDER)' к нему. Вы можете установить имя пользователя/пароль по умолчанию в файле application.properties, установив свойства 'security.user.name' и' security.user.password'. Дополнительные свойства см. В [справочном руководстве] (http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html). –
Здесь есть лучший пример (более современный): https://github.com/spring-projects/spring-security-oauth/blob/master/tests/annotation/jdbc/src/main/java/demo/Application .java # L81. Этот метод authenticationManager является новым переопределением в моментальных снимках 2.0.4 (посмотрите на реализацию, если вы хотите использовать ее с 2.0.3). –
@DaveSyer образец не запускался для меня: «Ошибка создания bean-компонента с именем» org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration '" –