2014-03-04 3 views
3

나는 oauth2의 작동 예제를 가지고 있으며 클라이언트와 리소스 소유자에 대한 inmemory 인증 및 권한 부여를 사용합니다. 나는 JDBC 인증 및 권한 부여로 변환하려고 노력하고있다. Bad Credentials 오류가 계속 발생합니다. 필터 보안을 통해 다음과 같이 디버깅하는 것이 매우 혼란 스럽습니다.Oauth2 Java Config JDBC

Inserted는 현재 메모리 인증 사용자를 사용하지만 클라이언트는 사용하지 않는 자바 코드입니다. 스키마는 this과 동일합니다.

으로 Java 인증을 사용하여 oauth2.0의 전체 작동 예제가 있습니까?

-------------------

코드는 당신이 당신의 질문에 넣어 URL에서 동일한 스키마를 사용하고

public class WebSecurityConfig extends OAuth2ServerConfigurerAdapter { 
    private final static Logger logger = LogFactory.getLogger(WebSecurityConfig.class); 



    private JdbcClientDetailsService jdbcClientDetailsService; 
    private JdbcTokenStore jdbcTokenStore; 
    private JdbcUserDetailsManagerConfigurer jdbcUserDetailsManagerConfigurer; 
    // @formatter:off 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     OAuth2ServerConfigurer oAuth2ServerConfigurer = new OAuth2ServerConfigurer().tokenStore(jdbcTokenStore); 
     http 
      .requestMatchers() 
       .and() 
      .authorizeRequests() 
       .antMatchers("/").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .apply(oAuth2ServerConfigurer); 
     http.setSharedObject(ClientDetailsService.class, jdbcClientDetailsService); 

    } 
    // @formatter:on 

// // @formatter:off 
// @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
//  int validityInSec = Integer.parseInt(validtityInSeconds); 

     auth 
       .userDetailsService(new InMemoryUserDetailsManager(getUserDetails())); 

    } 
    // @formatter:on 
// 
    private final Collection<UserDetails> getUserDetails() { 
     List<UserDetails> userDetails = new ArrayList<UserDetails>(); 
     userDetails.add(new User("auction", "password", AuthorityUtils.createAuthorityList(
       "USER", "read", "write"))); 
     return userDetails; 
    } 


    @Autowired 
    @Qualifier("oauth_details_ds") 
    public void setDataSource(DataSource dataSource){ 
     jdbcClientDetailsService = new JdbcClientDetailsService(dataSource); 
     jdbcTokenStore = new JdbcTokenStore(dataSource); 
//  try { 
//   jdbcUserDetailsManagerConfigurer = new JdbcUserDetailsManagerConfigurer().dataSource(dataSource); 
//  } catch (Exception e) { 
//   logger.error("Bad code design: ",e); 
//   e.printStackTrace(); 
//  } 
    } 



} 
+0

security.xml에 JDBC를 구성하지 않는 이유는 무엇입니까? 문서에서 어떻게하는지 보여줍니다 ... – OhadR

답변

4

을 below--. 나는 postgres를 사용하기 때문에, 타입의 일부를 변경해야했다 (varchar -> character varying, LONGVARBINARY -> bytea). 내 데이터 소스가 별도의 구성 클래스에 설정하고 다음과 같습니다되는 것을 또한 :

나는 Sparklr2 ( https://github.com/spring-projects/spring-security-oauth/tree/master/samples/oauth2/sparklr)에서 제공하는 예제를 사용하고
@Bean 
public DataSource dataSource() { 
    BoneCPDataSource dataSource = new BoneCPDataSource(); 

    dataSource.setDriverClass("org.postgresql.Driver"); 
    dataSource.setJdbcUrl("jdbc:postgresql://localhost/oauthDB"); 
    dataSource.setUsername("my_username"); 
    dataSource.setPassword("*****"); 

    return dataSource; 
} 

나는 다음 클래스 가질 수 있도록 :

@Configuration 
@EnableWebSecurity 
public class OAuth2ServerConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private TokenStore tokenStore; 

    private static DataSource dataSource; 
    @Autowired 
    private void setDataSource(DataSource dataSourcee) { 
     dataSource = dataSourcee; 
    } 

//... SOME MORE CODE ... 

@Configuration 
@Order(1) 
protected static class AuthorizationServerConfiguration extends 
     OAuth2AuthorizationServerConfigurerAdapter { 

    private TokenStore tokenStore = new JdbcTokenStore(dataSource); 

나머지 코드는 Sparklr2와 거의 같습니다.