Я починаю з 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. У когось є рішення для цього?