/ / Spring OAuth2 відключити HTTP Basic Auth для TokenEndpoint - spring, spring-security, oauth, spring-security-oauth2, spring-oauth2

Spring OAuth2 відключає протокол HTTP Basic Auth для TokenEndpoint - пружина, spring-security, oauth, spring-security-oauth2, spring-oauth2

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

Чи є спосіб відключити HTTP Basic Auth для кінцевої точки / oauth / token? Я хотів би надіслати client_id та client_secret в тілі JSON або в заголовках запиту.

приклади завитків, які я хотів би працювати:

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"

АБО

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"

Відповіді:

12 для відповіді № 1

Я нарешті це з’ясував. Спосіб відключення HTTP Basich Auth полягає в включенні автентифікації форми для клієнтів. Просто додайте ці рядки до своєї конфігурації.

@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 / json. У когось є рішення для цього?