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..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. @@ -1514,6 +1516,9 @@ Procedure PrepareAuthentication(PreparedRequest) If AuthenticationType = "aws4-hmac-sha256" Then PrepareAuthenticationAWS4(PreparedRequest); EndIf; + If AuthenticationType = "bearer" Then + PrepareAuthenticationBearer(PreparedRequest); + EndIf; EndIf; EndIf; @@ -2467,6 +2472,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..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 // // Возвращаемое значение: @@ -1364,7 +1383,10 @@ ПодготовленныйЗапрос.СобытияНаОтвет.Добавить("ОбработкаОтветаСКодом401"); КонецЕсли; Если ТипАутентификации = "aws4-hmac-sha256" Тогда - ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос); + ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос); + КонецЕсли; + Если ТипАутентификации = "bearer" Тогда + ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос); КонецЕсли; КонецЕсли; КонецЕсли; @@ -2748,7 +2770,19 @@ КонецФункции -#КонецОбласти +#КонецОбласти + +Процедура ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос) + + Если Не ПодготовленныйЗапрос.Аутентификация.Свойство("Токен") или не ЗначениеЗаполнено(ПодготовленныйЗапрос.Аутентификация.Токен) Тогда + // Токен не заполнен. + Возврат; + КонецЕсли; + + ПодготовленныйЗапрос.Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", ПодготовленныйЗапрос.Аутентификация.Токен)); + +КонецПроцедуры + #Область КодированиеДекодированиеДанных