/ / Spring OAuth2 desativa o Autenticação Básica HTTP para TokenEndpoint - spring, spring-security, oauth, spring-security-oauth2, spring-oauth2

OAuth2 de Spring desativa o Autenticação Básica de HTTP para TokenEndpoint - spring, spring-security, oauth, spring-security-oauth2, spring-oauth2

Eu estou começando com o Spring OAuth2. Até aí tudo bem, eu tenho garantido meu aplicativo com a configuração. Mas eu tenho um problema, o meu cliente não suporta a autorização básica HTTP.

Existe uma maneira de desativar a autenticação básica de HTTP para o endpoint / oauth / token? Gostaria de enviar o client_id e client_secret no corpo do JSON ou nos cabeçalhos da solicitação.

Eu gostaria de trabalhar com exemplos de curvas:

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"

OU

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"

Respostas:

12 para resposta № 1

Eu finalmente descobri isso. A maneira de desabilitar o HTTP Basich Auth é habilitar uma autenticação de formulário para clientes. Basta adicionar essas linhas à sua configuração.

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

Agora você poderá enviar uma solicitação bem-sucedida para o TokenEndpoint assim:

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"

Mas ainda resta o problema do aplicativo ContentType / json restante. Alguém tem uma solução para isto?