Фон
Я следил за этим учебник, чтобы настроить сервер 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");
}
}
}