Не могу войти через BasicAuth - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь реализовать oauth с токеном.Все вроде хорошо, но после POST

http://localhost:8080/oauth/token?grant_type=password

с установленным BasicAuth admin / admin (у меня есть пользователь в базе данных с логином admin и паролем admin)

У меня появилось окно с базовой аутентификацией, когда янаписал свой логин и пароль я снова и снова получал это окно с базовой аутентификацией.

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/**").authenticated();
    }
}

.

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security
                .tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()")
                .allowFormAuthenticationForClients();
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("android-client")
                .authorizedGrantTypes("client-credentials", "password","refresh_token")
                .authorities("ROLE_CLIENT", "ROLE_ANDROID_CLIENT")
                .scopes("read", "write", "trust")
                .resourceIds("oauth2-resource")
                .accessTokenValiditySeconds(5000)
                .secret("android-secret").refreshTokenValiditySeconds(50000);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager)
                .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST);
    }
}

.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserRepository userRepository;

    @Bean
    public AuthenticationManager customAuthenticationManager() throws Exception {
        return authenticationManager();
    }

    private PasswordEncoder encoder =
            PasswordEncoderFactories.createDelegatingPasswordEncoder();

    @Autowired
    protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(username -> {
            Optional<User> user = userRepository.findById(username);
            if (user.isPresent()) {
                return new org.springframework.security.core.userdetails.User(user.get().getUsername(), encoder.encode(user.get().getPassword()),
                        true, true, true, true, AuthorityUtils.createAuthorityList("USER"));
            } else {
                throw new UsernameNotFoundException("Could not find the user '" + username + "'");
            }
        });
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().fullyAuthenticated().and().httpBasic().and().csrf().disable();
    }
}

ОЧЕНЬ ВАЖНО:
если я удаляю ResourceServerConfig.java, я могу войти через BasicAuth, после записи admin / admin я получил JSON от своего localhost: 8080, но мне нужен доступ по токену.

Это мой 1-й RESTfulAPI.
Кто-нибудь может мне помочь?Кто-нибудь знает, где я допустил ошибку?
В интернете мало информации.Как я могу это исправить?

1 Ответ

0 голосов
/ 29 января 2019

Вам необходимо отправить свой clientId: «android-client» и секрет «android-secret» в качестве базовых учетных данных для аутентификации вместо ваших учетных данных пользователя (admin / admin), которые необходимо отправить в качестве параметров http (имя пользователя = пароль администратора) = admin) как параметр "grant_type"

поэтому ваш запрос должен быть таким

http://localhost:8080/oauth/token?grant_type=password&username=admin&password=admin

, затем добавьте свой clientId и секретный ключ к базовым учетным данным аутентификации

...