Имя: Пароль:
1C
1С v8
Получение токена OAuth 2.0 с использованием Resource Owner Flow.
0 AgniiISO
 
26.03.20
11:40
Доброго времени суток, пытаюсь понять как работает данный протокол, вроде есть опыт пост гет обращений к апи разных сайтов, но не работает, постоянно 400 ошибка, как только убирать /core/connect/token к сайту обращается, а как не убирать 400.

ПараметрыURL = Новый Структура;
    АдресЗапроса = "https://нужный сайт.ru";
    //ПараметрыURL.Вставить("grant_type", "password&username=логин&password=пароль&scope=resourceProfile");
    СтрокаЗапроса = "grant_type=password&username=логин&password=пароль&scope=resourceProfile";
    
    АдресЗапроса = Адрес(АдресЗапроса, ПараметрыURL);
    СтруктураURI = СтруктураURI(АдресЗапроса);
    HTTPСоединение = новый HTTPСоединение(СтруктураURI.Хост,443 , , ,, 15, Новый ЗащищенноеСоединениеOpenSSL);
    headers = Новый Соответствие;
    headers.Вставить("Content-Type", "application/x-www-form-urlencoded");

Вот тут непонятно что комментил эту строку то оставлял, без разники
    headers.Вставить("Authorization", "Basic cmVzb3VyY2VzLjIyNTY3NTY3NzU2NzM4NzczMjMtNm4yOTVmNDQ1N2dmZzY1NzU2aGZnaDU2NTk3Z2g1NjUuZW4uMjMuZWNmLm1lcmNlZGVzLWJlbnoucnU6OEpmclJJZjdodzRfZzhoZTVqMUpUa3JHMGdtdEowZTgwR2pr");
    //HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере, headers);
    

Тут перед кор то убирал слеш то остался
HTTPЗапрос = Новый HTTPЗапрос("/core/connect/token", headers);

    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса);
    //HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос);
    Если HTTPОтвет.КодСостояния = 200 Тогда
        Ответ = HTTPОтвет.ПолучитьТелоКакСтроку();
        ЧтениеJSON = новый ЧтениеJSON();
        ЧтениеJSON.УстановитьСтроку(Ответ);
        Token = ПрочитатьJSON(ЧтениеJSON, Ложь);
        Возврат Token;
    Иначе
        ВызватьИсключение "Произошла ошибка обращения к серверу," + "Токен не получен" +
        Символы.ПС + "Статус ответа сервера: " + HTTPОтвет.КодСостояния;
    КонецЕсли;
    

Вот вырезка из методички какой запрос у меня должен получится по идее
POST /core/connect/token HTTP/1.1 Host: https://сайтец.ru Authorization: Basic cmVzb3VyY2VzLjIyMTQ2OTcxNjY0Mjg4OTAyNTYtNm4yOTV3NDUxeTV1cjhnbDViNThpNnkzNDVqdDI2MTUuZW4uMjMuZWNmLm1lcmNlZGVzLWJlbnoucnU6N0pmclJJZjdodzRfZzhoZTVqMUpUa3JHMGdtdEowZTgwR2pr Content-Type: application/x-www-form-urlencoded grant_type=password&username={логин}&password={пароль}&scope=resourceProfile
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.