Spring OAuth2 отключить базовую аутентификацию HTTP для TokenEndpoint

Я начинаю с Spring OAuth2. Пока все хорошо, я защитил свое приложение конфигурацией. Но у меня проблема, мой клиент не поддерживает базовую авторизацию HTTP.

Есть ли способ отключить базовую аутентификацию HTTP для конечной точки / oauth / token? Я хотел бы отправить client_id и client_secret в теле JSON или в заголовках запроса.

примеры curl, которые я хотел бы поработать:

curl -X POST -H "Content-Type: application/json" -d '{
"username": "user",
"password": "pass",
"grant_type": "password",
"client_id": "test-client-id",
"client_secret": "test-client-secret"
}' "http://localhost:9999/api/oauth/token"

OR

curl -X POST -H "Content-Type: application/json" -H "X-Client-ID: test-client-id" -H "X-Client-Secret: test-client-secret" -d '{
"username": "user",
"password": "pass",
"grant_type": "password"
}' "http://localhost:9999/api/oauth/token"

person Jakub Kopřiva    schedule 03.07.2016    source источник


Ответы (1)


Я наконец понял это. Чтобы отключить базовую аутентификацию HTTP, нужно включить аутентификацию с помощью формы для клиентов. Просто добавьте эти строки в свою конфигурацию.

@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
  @Override
  public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
    oauthServer.allowFormAuthenticationForClients();
  }
}

Теперь вы сможете отправить успешный запрос в TokenEndpoint следующим образом:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'username=user_username&password=user_password&grant_type=password&client_id=your_trusted_client_id&client_secret=your_trusted_client_secret' "http://localhost:8080/oauth/token"

Но все еще остается проблема ContentType application / json. У кого-нибудь есть решение для этого?

person Jakub Kopřiva    schedule 03.07.2016
comment
Я думаю, что проблема использования JSON в качестве входного формата заключается в том, что если вы его измените, ваш сервер больше не будет соответствовать OAuth2, потому что стандарт RFC говорит, что запрос ДОЛЖЕН быть отправлен в формате с кодировкой URL: tools.ietf.org/html/rfc6749#appendix-B - person Mariano Ruiz; 21.11.2016
comment
Я не думаю, что RFC указывает, что в запросе должна быть только одна опция Content-Type. Предоставленное решение позволяет одновременно использовать application / json и url-кодирование. Конечно, должна быть возможность включать / отключать JSON для каждого клиента. - person Jakub Kopřiva; 04.12.2016
comment
Я не читал с БОЛЬШОЙ внимательностью, но статьи, которые я прочитал, казались довольно скудными по x-www-form-urlencoded запросам. См. tools.ietf.org/html/rfc6749#section-4.3.2 - person demaniak; 23.03.2017