From 5ff187da33c52f20027947d99c28801c21ff78dc Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Mon, 21 Oct 2024 11:40:03 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20bearer-=D0=B0=D1=83=D1=82=D0=B5=D0=BD=D1=82=D0=B8?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++++ .../HTTPConnector/Ext/Module.bsl | 13 +++++++++++++ .../Ext/Module.bsl" | 19 +++++++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9cc25d9..b016871 100644 --- a/README.md +++ b/README.md @@ -279,6 +279,14 @@ Json.Вставить("field2", "value2"); Результат = КоннекторHTTP.GetJson("https://user:pass@httpbin.org/basic-auth/user/pass"); ``` +## Bearer-аутентификация +Параметры bearer-аутентификации можно передать в параметре `ДополнительныеПараметры.Аутентификация`. +При этом `Тип` нужно установить в значение `Bearer` и задать свойство `Токен`. + +```bsl +Аутентификация = Новый Структура("Токен, Тип", "exampleBearerToken_abc1234", "Bearer"); +``` + ## Digest-аутентификация Параметры Digest-аутентификации можно передать в параметре `ДополнительныеПараметры.Аутентификация`. При этом `Тип` нужно установить в значение `Digest`. diff --git a/src/en/CommonModules/HTTPConnector/Ext/Module.bsl b/src/en/CommonModules/HTTPConnector/Ext/Module.bsl index 6e94401..f1a80f4 100644 --- a/src/en/CommonModules/HTTPConnector/Ext/Module.bsl +++ b/src/en/CommonModules/HTTPConnector/Ext/Module.bsl @@ -1514,6 +1514,9 @@ Procedure PrepareAuthentication(PreparedRequest) If AuthenticationType = "aws4-hmac-sha256" Then PrepareAuthenticationAWS4(PreparedRequest); EndIf; + If AuthenticationType = "bearer" Then + PrepareAuthenticationBearer(PreparedRequest); + EndIf; EndIf; EndIf; @@ -2467,6 +2470,16 @@ EndFunction #EndRegion +Procedure PrepareAuthenticationBearer(PreparedRequest) + + If Not PreparedRequest.Authentication.Property("Token") Or Not ValueIsFilled(PreparedRequest.Authentication.Token) Then + // token is empty + Return; + EndIf; + + PreparedRequest.Headers.Insert("Authorization", StrTemplate("Bearer %1", PreparedRequest.Authentication.Token)); + +EndProcedure #Region EncodingDecodingData #Region ServiceStructuresZip diff --git "a/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" "b/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" index 7a83a25..0aa80c9 100644 --- "a/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" +++ "b/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" @@ -1364,7 +1364,10 @@ ПодготовленныйЗапрос.СобытияНаОтвет.Добавить("ОбработкаОтветаСКодом401"); КонецЕсли; Если ТипАутентификации = "aws4-hmac-sha256" Тогда - ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос); + ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос); + КонецЕсли; + Если ТипАутентификации = "bearer" Тогда + ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос); КонецЕсли; КонецЕсли; КонецЕсли; @@ -2748,7 +2751,19 @@ КонецФункции -#КонецОбласти +#КонецОбласти + +Процедура ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос) + + Если Не ПодготовленныйЗапрос.Аутентификация.Свойство("Токен") или не ЗначениеЗаполнено(ПодготовленныйЗапрос.Аутентификация.Токен) Тогда + // Токен не заполнен. + Возврат; + КонецЕсли; + + ПодготовленныйЗапрос.Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", ПодготовленныйЗапрос.Аутентификация.Токен)); + +КонецПроцедуры + #Область КодированиеДекодированиеДанных From 2d15fe7247286266be4dc263463cc95e6bfc3ff8 Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Mon, 21 Oct 2024 12:45:42 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BA=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80.=20=D0=94=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D1=82=D1=8C=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HTTPConnector/Ext/Module.bsl | 2 ++ .../Ext/Module.bsl" | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/en/CommonModules/HTTPConnector/Ext/Module.bsl b/src/en/CommonModules/HTTPConnector/Ext/Module.bsl index f1a80f4..cf200f2 100644 --- a/src/en/CommonModules/HTTPConnector/Ext/Module.bsl +++ b/src/en/CommonModules/HTTPConnector/Ext/Module.bsl @@ -397,6 +397,8 @@ EndFunction // If Type = Digest or Basic: // ** User - String - user name. // ** Password - String - user password. +// If Type = Bearer: +// ** Token - String - bearer token. // If Type = AWS4-HMAC-SHA256: // ** AccessKeyID - String - Access key ID. // ** SecretKey - String - secret key. diff --git "a/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" "b/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" index 0aa80c9..6a05759 100644 --- "a/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" +++ "b/src/ru/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" @@ -487,6 +487,8 @@ // Если Тип = Digest или Basic: // ** Пользователь - Строка - имя пользователя. // ** Пароль - Строка - пароль пользователя. +// Если Тип = Bearer: +// ** Токен - Строка - токен. // Если Тип = AWS4-HMAC-SHA256: // ** ИдентификаторКлючаДоступа - Строка - идентификатор ключа доступа. // ** СекретныйКлюч - Строка - секретный ключ. @@ -613,6 +615,23 @@ КонецФункции +// Конструктор аутентификации Bearer +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - Код типа аутентификации. Всегда "Bearer". +// * Токен - Строка - Bearer-токен. +// +Функция НоваяАутентификацияBearer(Токен = "") Экспорт + + Результат = Новый Структура; + Результат.Вставить("Тип", "Bearer"); + Результат.Вставить("Токен", Токен); + + Возврат Результат; + +КонецФункции + // Конструктор аутентификации AWS4-HMAC-SHA256 // // Возвращаемое значение: