самостоятельно созданный поставщик авторизации возвращает 404 - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать провайдера oAuth2. В настоящее время для этого должны использоваться некоторые жестко запрограммированные пользователи, но цель состоит в том, чтобы привязать их к существующим серверам LDAP.

Я использую загрузочный фреймворк Spring.

Это моя точка входа:

@SpringBootApplication
public class OauthserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(OauthserverApplication.class, args);
    }
}

Это мой контроллер:

@RestController
@RequestMapping("clients")
public class CustomOAuth2Controller {

@Autowired private ClientDetailsRepository clientDetailsRepository;

@GetMapping
public List<CustomClientDetails> getAll(){
    List<CustomClientDetails> l = new ArrayList<>();
    for(CustomClientDetails ccd : this.clientDetailsRepository.findAll())
        l.add(ccd);
    return l;
}

@PostMapping
public String addClient(@RequestBody CustomClientDetails customClientDetails){
    this.clientDetailsRepository.save(customClientDetails);
    return "Added Successfully";
}
@DeleteMapping
public String removeClient(@RequestParam("clientid") String clientid){
    try {
        Long l = Long.parseLong(clientid);
        this.clientDetailsRepository.deleteById(l);
    }catch (Exception ex){}
    return "Deleted";
}
}

Хранилище с моими пользовательскими данными довольно стандартно:

@Repository
public interface ClientDetailsRepository extends 
CrudRepository<CustomClientDetails,Long> {
}

Класс для настройки oAuth

@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {

@Autowired private final AuthenticationManager authenticationManager;
@Autowired private ClientDetailsRepository clientDetailsRepository;

@Autowired
public OAuth2Config(AuthenticationConfiguration authenticationConfiguration) throws Exception {
this.authenticationManager = authenticationConfiguration.getAuthenticationManager();
}

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
  clients.withClientDetails( identifier -> {
      System.out.println(" client id from ui "+identifier);
      return clientDetailsRepository.findById(Long.parseLong(identifier)).get();
  });
}

@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer
    .tokenKeyAccess("permitAll()")
    .checkTokenAccess("isAuthenticated()")
    .passwordEncoder(NoOpPasswordEncoder.getInstance());
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager);
}
}

И мой логин:

@Configuration
@EnableWebSecurity
@Order(1)
public class LoginConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .anyRequest()
        .authenticated()
        .and()
        .formLogin()
        .and()
        .httpBasic();
}

@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser(User.withDefaultPasswordEncoder().username("user").password("user").roles("USER").build());

}

}

В своем клиентском приложении я использую следующие учетные данные:

server:  
    port: 9090  
 security:  
    oauth2:
        client:
            client-id: acme
            client-secret: acmesecret
            scope: read,write
            auto-approve-scopes: '.*'
            accessTokenUri: http://localhost:8010/login/oauth/access_token
            userAuthorizationUri: http://localhost:8010/login/oauth/authorize
            clientAuthenticationScheme: form
        resource:
            userInfoUri: http://localhost:8010/user

и следующий конфиг:

@SpringBootApplication
@EnableOAuth2Sso
@RestController
public class SpringBootOauth2Application extends WebSecurityConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootOauth2Application.class, args);
    }

    @RequestMapping({ "/user", "/me" })
    public Map<String, String> user(Principal principal) {
        Map<String, String> map = new LinkedHashMap<>();
        map.put("name", principal.getName());
        return map;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/login**", "/webjars/**", "/error**")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and().logout().logoutSuccessUrl("/").permitAll()
                .and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }

}

Это частично работает. Я могу выбрать «логин», и он перенаправляет меня на страницу входа в мой провайдер oAuth. Но как только я ввожу учетные данные и подтверждаю, он выдает 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...