2017-02-13 24 views
0

Я хочу настроить URI конечной точки OAuth. Я хочу отправить параметры в тело сообщения вместо параметров запроса.Spring security OAuth2 запрос как объект вместо параметров запроса

теперь мой запрос как -

example.com/oauth/token?grant_type=password&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&username={USERNAME}&password={PASSWORD} 

Но я хочу, это так.

example.com/oauth/token

Тело запроса -

{ 
    grant_type=password, 
    client_id={CLIENT_ID}, 
    client_secret={CLIENT_SECRET}, 
    username={USERNAME}, 
    password={PASSWORD} 
} 

Как я должен это делать?

+0

Весь смысл OAuth заключается в том, что глаголы и шаблоны URL стандартизированы ... Какая у вас возможность использовать POST вместо GET? –

+0

, чтобы сделать его более безопасным. Я не хочу показывать значения параметров в URL-адресе. –

+0

Вы всегда должны использовать HTTPS. ** Если нет, оба параметра GET и POST отправляются простым текстом ** по проводу и не являются безопасными. Я предлагаю использовать HTTPS и придерживаться стандартов. –

ответ

0

Токена конечной точки должного реализованного сервера авторизации НЕ принимает запросы GET, поскольку RFC 6749, «3.2. Token Endpoint» говорит следующее:

Клиент должны использовать HTTP «POST» метода при создании запросы доступа к токену.

Итак, конечная точка вашего сервера авторизации должна отклонять запросы GET.

RFC 6749, «4.3. Resource Owner Password Credentials Grant» говорит, что параметры запроса запроса на токен с использованием потока полномочий владельца ресурса должны быть встроены в тело запроса в формате «application/x-www-form-urlencoded». Ниже приводится выдержка из «4.3.2. Access Token Request».

POST /token HTTP/1.1 
Host: server.example.com 
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW 
Content-Type: application/x-www-form-urlencoded 

grant_type=password&username=johndoe&password=A3ddj3w 

Поэтому вы не должны настроить свой сервер авторизации. Если сервер реализован правильно, его конечная точка маркера принимает запросы POST.

1

Конечная точка маркера, созданная spring-oauth2, уже имеет дело с POST. Было бы трудно настроить его, чтобы принять тело запроса JSON, потому что класс TokenEndpoint ожидает, что все параметры будут параметрами @RequestParam.

Однако, если вы беспокоитесь о безопасности (поскольку HTTP не защищает параметры запроса), вы действительно можете отправить параметры запроса через сообщение. Это просто вопрос отправки запроса в форме «form-data» или «x-www-form-urlencoded». Это два способа отправки произвольных параметров ключа в тело запроса таким образом, который появляется на сервере, поскольку они являются регулярными параметрами запроса. Таким образом, вы должны сделать это своим клиентом.

Также обратите внимание, что в spring-oauth2 можно отключить конечную точку GET, таким образом, заставляя ваших клиентов использовать POST с одним из способов выше.