Вы должны быть осторожны с content-type
вашего запроса. Разные API-интерфейсы XHR используют разные значения по умолчанию.
Спецификация OAUTH2 для запроса токена доступа описывает тип контента как application/x-www-form-urlencoded
.
Пока GreaseMonkey отправляет запросы с использованием JSON по умолчанию, что можно изменить, установив заголовок Content-Type и кодировав данные в виде строки, используя 'x-www-form-urlcoded'
GM.xmlHttpRequest({
method: "POST",
url: "https://quire.io/oauth/token",
data: "grant_type=authorization_code&code=xxx&client_id=yyy&client_secret=zzz",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
jquery.ajax () позволяет автоматически установить тип содержимого по умолчанию для application / x-www-form-urlencoded
ВАЖНОПОБОЧНОЕ ПРИМЕЧАНИЕ: Использование $ .ajax () указывает на использование в браузере. Если это правда, тогда НЕ делайте этого! Предоставление вашего client_secret приложению, работающему в браузере, позволит любому аутентифицироваться в качестве вашего идентификатора запроса и получить доступ к вашему проекту с помощью grant_type: client_authentication
. На данный момент API Quire требует, чтобы вы запустили выделенный сервер, с которого вы должны выполнить запрос токена доступа, чтобы не показывать client_secret
. Если вы используете jquery на стороне сервера, тогда все в порядке.
Существует открытый Issue # 8 , который также поддерживает поток кода авторизации на стороне клиента без использования client_secret (подходит из SPAили расширение браузера).