Spring REST api OAuth2 проверяет токен с внешнего сервера авторизации - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь реализовать мой REST API, который является сервером ресурсов, используемым мобильными приложениями, в моем потоке OAuth2. У меня есть внешний сервер авторизации, созданный кем-то другим. В настоящее время я реализовал получение токена доступа в мобильном приложении (я полагаю, что клиент в потоке OAuth2?), И теперь, когда я делаю вызовы от клиента к серверу ресурсов (API REST), мне нужен сервер ресурсов для проверки токена из сервер авторизации, прежде чем завершить запрос для клиента. Я попытался найти различные учебные пособия по Spring-security-OAuth2, и мне удалось немного продолжить. Вот то, что я в настоящее время придумал:

@Configuration
@EnableResourceServer
public class SecurityConfig extends ResourceServerConfigurerAdapter  {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
         .antMatchers("/**").authenticated();
    }

    @Primary
    @Bean
    public RemoteTokenServices tokenService() {
        RemoteTokenServices tokenService = new RemoteTokenServices();
        tokenService.setCheckTokenEndpointUrl(
          end_point_url);
        return tokenService;
    }

}

В настоящее время сервер авторизации end_point_url возвращает только http 200, когда ему дан действительный токен в заголовках запроса как Authorization: Bearer VALID_TOKEN. Прямо сейчас мои пути в REST API "защищены", но все, что требуется, это передать заголовок Authorization: Bearer и вообще никакого токена или токена при выполнении запросов к моему REST API, и он считается как аутентифицированный. Я явно что-то упустил или не понял. Я думаю, что это не проверка токена вообще с сервера авторизации или ..? Я не знаю, честно. Есть идеи, что мне нужно делать?

UPDATE:

Как я прокомментировал ниже, я следил за журналами своих внешних серверов авторизации так же, как за журналами моих весенних отдыхающих приложений. Я обнаружил, что с этой конфигурацией, которую я представил здесь, приложение spring не извлекает / использует токен авторизации, который приходит от клиента (мобильного приложения) как Authorization: Bearer VALID_TOKEN, а вместо этого выполняет вызов на сервер авторизации с заголовки типа Authorization: Basic SOME_RANDOM_TOKEN. Почему он игнорирует и не использует токен с тегом Bearer в мобильном приложении (клиенте)?

1 Ответ

0 голосов
/ 04 июня 2019

Хорошо, поэтому я нашел способ сделать именно то, что мне нужно.Я не совсем уверен, что это правильный путь, но он делает именно то, что я хотел.Таким образом, в основном вместо использования RemoteTokenServices я использовал UserInfoTokenServices следующим образом:

@Override
public void configure(final HttpSecurity http) throws Exception {
    http.csrf().disable();
    http.authorizeRequests().anyRequest().authenticated();
}

@Primary
@Bean
public UserInfoTokenServices tokenService() {
    final UserInfoTokenServices tokenService = new UserInfoTokenServices(USER_INFO_ENDPOINT, "");
    return tokenService;
}

Заменив мои предыдущие конфигурации приведенным выше примером, мой API теперь выполняет запрос к моему серверу авторизации на КАЖДЫЙ запрос кAPI для получения информации о пользователе с данным токеном доступа.Если он получает информацию о пользователе, мы gucci, а в противном случае мы не авторизованы.Надеюсь, это кому-нибудь поможет!

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