Имя: Пароль:
1C
1С v8
Digest аутентификация в 1с8.2
0 AlexTambov197
 
19.05.17
15:02
Добрый день. Есть у кого то наработки по Digest аутентификация в 1с 8.2.
Делаю запрос на сервер приходит ответ:
С кодом 401. Из ответа беру параметр "nonce". Далее шифрую и добавляю ответ. Делаю новый запрос но все равно код 401.

Результат = Соединение.Получить(HTTPЗапрос,файлответа);
Ответ = Результат.Заголовки.Получить("WWW-Authenticate");

вычисляю параметр нонс2 из строки ответа

    А1 = MD5("логин:параметрреалм:пароль");
    А2 = MD5("GET:ресурс");
    ОтветМД5 = MD5(А1+":"+нонс2+А2);

HTTPЗапрос.Заголовки.Вставить(Ответ+",response="""+ОтветМД5+"""");

делаю запрос код все равно 401.
1 oleg_km
 
19.05.17
15:10
А разве HTTPСоединение не умеет из коробки делать авторизацию?
2 AlexTambov197
 
19.05.17
15:17
(1) Digest видимо нет.
3 oleg_km
 
19.05.17
15:46
(2) Переходите на .NET, там все есть
4 AlexTambov197
 
19.05.17
16:28
(3) Удалось реализовать такое решение. Кому интересно пишите. скину код.
5 oleg_km
 
19.05.17
16:38
(4) У меня есть наоборот решение - проверка Digest на стороне 1С в HTTP-сервисе. Т.е. в IIS настроено анонимное подключение, а мой код на 1С формирует нужные заголовки, чтобы клиент прошел авторизацию
6 coder1cv8
 
19.05.17
16:44
А что там сложного?... Если без подробностей, то вот:

Токен = ПолучитьТокен(Сервер,Ресурс);
Ответ = ПолучитьХеш(ПолучитьХеш(Пользователь + ":" + Область + ":" + Пароль) + ":" + Токен + ":" + ПолучитьХеш("POST:" + Ресурс));
    
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization","Digest username="""+Пользователь+""" realm="""+Область+""", nonce="""+Токен+""", uri="""+Ресурс+""", response="""+Ответ+"""");
Заголовки.Вставить("Content-Type","multipart/form-data; boundary="+Разделитель);
    
Соединение = Новый HTTPСоединение(Сервер);
Запрос = Новый HTTPЗапрос(Ресурс,Заголовки);
Запрос.УстановитьТелоИзСтроки(СформироватьТелоЗапроса(Разделитель,ПутьКФайлу),,ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
7 oleg_km
 
19.05.17
17:51
(6) А кто сказал что есть сложности? Товарищ похвалился, что сделал авторизацию на стороне клиента, а я - на стороне сервера. Кто-то будет искать, наткнется нас и спросит, если будет надо. Ты выложил код - тоже молодец. Я могу добавить тебе код сервера - запилишь статью на ИС.
8 AlexTambov197
 
21.05.17
19:05
(6) Да беда была в том что алгоритм был немного другой. помимо nonce в ответ нужно было добавить номер запроса и случайное число с клиента. Шифровал при помощи
"capicom". Спасибо за код с методом POST. До этого не работал с HTTP соединениями в 1с(не доводилось) и инфы по этой теме не очень а теперь пробел заполнен всем спасибо еще раз.
9 bmazniy
 
09.06.17
15:30
(4) Алекс если вам не сложно, можете мне показать ваш код целиком?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn