Spring Аутентификация OAuth2 с запросом REST

Фон

Я следил за этим учебник, чтобы настроить сервер OAuth2 с помощью spring-security-oauth2.

Пока это работает так:

  • Когда пользователь пытается подключиться к серверу, отображается старый простой диалог аутентификации.
  • Если указаны правильные учетные данные, пользователь перенаправляется на форму подтверждения Spring по умолчанию.
  • Если пользователь выбирает «Разрешить», пользователь затем перенаправляется на любую страницу, которую я хочу, с кодом авторизации, который можно использовать для получения токена доступа.

SSCCE

Я поместил этот готовый к запуску пример в свою учетную запись github (что более или менее код, который дается учебником)

Клонировать с помощью:

git clone https://github.com/ArnaudDenoyelle/sscce-spring-oauth2.git

Выполнить с помощью:

mvn spring-boot:run

Затем перейдите к:

http://localhost:9999/uaa/oauth/authorize?response_type=code&client_id=acme&redirect_uri=http://example.com

Авторизоваться с помощью:

-user : user
-password : password

Проблема

Теперь я хотел бы изменить поведение:

  • Я бы предпочел форму логина/пароля вместо простого старого диалога аутентификации.
  • Мне не нужен второй шаг, который запрашивает у пользователя авторизацию: я просто хочу получить токен доступа.

Пока я могу сделать это с помощью следующих шагов:

  • Пользователь вводит свои учетные данные в настраиваемую форму.
  • Я отправляю запрос GET на http://localhost:9999/uaa/oauth/authorize?response_type=code&client_id=acme&redirect_uri=http://example.com
  • Я получаю HTML-ответ (форма подтверждения), но меня это не волнует, если это HTTP 200. Он также предоставляет мне некоторые файлы cookie, необходимые для следующего шага.
  • I send a POST request to http://localhost:9999/uaa/oauth/authorize with the same body parameters that are sent by the default spring's confirmation form :
    • user_oauth_approval = true
    • область видимости.openid = истина

Это работает: пользователь перенаправляется на нужную мне страницу (в данном случае: http://example.com?code=$авторизация_код$ )

Вопрос

Все, что я хочу, это избавиться от формы подтверждения Spring. В моем случае это бесполезно: я просто хочу получить токен доступа для текущего сеанса, а не постоянно разрешать клиенту доступ к частным ресурсам. Есть ли конфигурация для этого?

Соответствующий код:

@SpringBootApplication
public class AuthserverApplication extends WebMvcConfigurerAdapter {

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

    @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 {
            clients.inMemory()
                    .withClient("acme")
                    .secret("acmesecret")
                    .authorizedGrantTypes("authorization_code", "refresh_token", "password").scopes("openid");
        }

    }
}

person Arnaud Denoyelle    schedule 12.01.2016    source источник