|
|
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) Алекс если вам не сложно, можете мне показать ваш код целиком?
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший