Помогите с вопросом...Пишу get запрос (текст ниже), при использовании защищенного сертификата не происходит перенаправление по ссылке, которая указана в redirect_uri, если использовать http, то происходит постоянное перенаправление на тот же адрес, но уже с https соединением.
При проверке в браузере, перенаправление происходит и все нормально. Как можно решить эту проблему?
При перенаправлении на office.com я должна в строке получить параметр "code", который потом хочу использовать для получения токена приложения.
В Set-Cookie есть такое поле как "buid" это одно и тоже? Если да, то в принципе я могу использовать его в качестве кода авторизации, но проблему с перенаправлением все равно надо как то решить...
Адрес="login.microsoftonline.com";
АдресРесурса="&response_mode=query&response_type=code&redirect_uri=https%3A%2F%2Fwww.office.com%2F&nux=1&msafed=0";
client_id="3bf6d724-6dae-4177-a437-cd1e20619bd8";
//Если НЕ (AccessToken = "" ИЛИ RefreshToken = "" ИЛИ RefreshTime = Дата(1, 1, 1)) Тогда
//
// Возврат;
//
// КонецЕсли;
ssl = Новый ЗащищенноеСоединениеOpenSSL();
//Новый СертификатКлиентаWindows(
// СпособВыбораСертификатаWindows.Выбирать),
//Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(
Адрес, //"хххххх.bitrix24.ru",
, // порт
, // пользователь
, // пароль
, // прокси
, // таймаут в секундах
ssl // защищенное HTTPS соединение
);
//Заголовки = Новый Соответствие;
Запрос = Новый HTTPЗапрос("/common/OAuth2/Authorize?client_id=" + client_id + АдресРесурса);
Ответ = Соединение.Получить(Запрос);
Сообщить (Ответ.КодСостояния);
АдресРесурса = Ответ.Заголовки.Получить("Location");
Сообщить (АдресРесурса);
(2)Мне нужно получить токен приложения чтобы потом использовать его в REST API.
Для этого я пыталась сделать все тоже самое что описано здесь.. https://infostart.ru/public/574117/ но не получается...
прикладываю полный код процедуры
Адрес="login.microsoftonline.com";
//АдресРесурса="&response_mode=query&response_type=code&redirect_uri=https%3A%2F%2Fwww.office.com%2F&nux=1&msafed=0";
АдресРесурса="client_id=3bf6d724-6dae-4177-a437-cd1e20619bd8&response_type=code&redirect_uri=https%3A%2F%2Fwww.office.com%2F&response_mode=query&scope=3bf6d724-6dae-4177-a437-cd1e20619bd8%20offline_access&state=arbitrary_data_you_can_receive_in_the_response";
client_id="3bf6d724-6dae-4177-a437-cd1e20619bd8";
//Если НЕ (AccessToken = "" ИЛИ RefreshToken = "" ИЛИ RefreshTime = Дата(1, 1, 1)) Тогда
//
// Возврат;
//
// КонецЕсли;
ssl = Новый ЗащищенноеСоединениеOpenSSL();
//Новый СертификатКлиентаWindows(
// СпособВыбораСертификатаWindows.Выбирать),
//Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(
Адрес, //"хххххх.bitrix24.ru",
, // порт
"пользователь", // пользователь
"пароль", // пароль
, // прокси
, // таймаут в секундах
ssl // защищенное HTTPS соединение
);
Заголовки = Новый Соответствие;
Запрос = Новый HTTPЗапрос("/common/OAuth2/Authorize?client_id=" + client_id + АдресРесурса);
Ответ = Соединение.Получить(Запрос);
Сообщить (Ответ.КодСостояния);
АдресРесурса = Ответ.Заголовки.Получить("Location");
Сообщить (АдресРесурса);
Сообщить (Ответ.ПолучитьТелоКакСтроку());
Сообщить(Ответ.Заголовки.Получить("Set-Cookie"));
НашаСтрока=Ответ.Заголовки.Получить("Set-Cookie");
Позиция=Найти(НашаСтрока,";");
НашаСтрока=Лев(НашаСтрока,Позиция-1);
Позиция=Найти(НашаСтрока,"=");
Код=Сред(НашаСтрока,Позиция+1,СтрДлина(НашаСтрока));
Сообщить(Код);
//если нас переадрессовали
Если Ответ.КодСостояния = 200 Тогда
////в Location взять code
//Сообщить (Ответ.Заголовки.Получить("Location"));
//Параметры = ПолучитьПараметрыИзGetСтроки(Ответ.Заголовки.Получить("Location"));
Cookie = Ответ.Заголовки.Получить("Set-Cookie");
//Код = Неопределено;
//
//
//Если Параметры.Свойство("code", Код) Тогда
// используя Код получаем access_token и refresh_token
Соединение = Новый HTTPСоединение(
Адрес,
, // порт
, // пользователь
, // пароль
, // прокси
5, // таймаут в секундах
ssl// защищенное HTTPS соединение
);
Запрос.АдресРесурса = "/common/OAuth2/Token" + ПараметрыАвторизацииВСтроке(Код);
Запрос.Заголовки.Вставить("Cookie", Cookie);
Запрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
Ответ = Соединение.Получить(Запрос);
Сообщить (Ответ.КодСостояния);
//Если Ответ.КодСостояния <> 200 Тогда
//
// ВызватьИсключение "Ошибка при получении access_token";
//
//Иначе
Сообщить (Ответ.ПолучитьТелоКакСтроку());
//// разобрать полученный json
//json = Ответ.ПолучитьТелоКакСтроку();
//
//
//Чтение = Новый ЧтениеJSON;
//Чтение.УстановитьСтроку(json);
//ОтветСтруктура = ПрочитатьJSON(Чтение);
//
//// сохраняю параметры подключения
//AccessToken = ОтветСтруктура.access_token;
//RefreshToken = ОтветСтруктура.refresh_token;
//RefreshTime = ТекущаяДата() + ОтветСтруктура.expires_in;
КонецЕсли;
//
//Иначе
//
// ВызватьИсключение "Ошибка при подключении, нет параметра code";
//
//КонецЕсли;
//КонецЕсли;
(4) Там было без разницы закоментировано или нет, я немного изменила параметры, теперь открывает страницу, но не авторизовывается, дословный перевод страницы с ошибкой такой
"Мы не можем вас подписать
Ваш браузер в настоящий момент настроен на блокировку файлов cookie. Вы должны разрешить куки-файлы использовать эту услугу.
Куки-файлы - это небольшие текстовые файлы, хранящиеся на вашем компьютере, которые сообщают нам, когда вы вошли в систему. Чтобы узнать, как разрешать куки-файлы, ознакомьтесь с интерактивной справкой в своем веб-браузере"
(5) У меня защищенное подключение не запускалось без указания сертификатов, т.е. при реализации как у Вас зайти на сайт не удавалось. (6) всё верно пишет, если есть возможность, посмотрите заголовки, отправляемые браузером во время авторизации, можно, например, в мозилле и установите такие же заголовки.