Skip to content

Commit

Permalink
Merge pull request #151 from Segate-ekb/feature/Bearer
Browse files Browse the repository at this point in the history
Добавил возможность bearer-аутентификации
  • Loading branch information
leemuar authored Oct 21, 2024
2 parents 715deeb + 2d15fe7 commit f6926a7
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 2 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,14 @@ Json.Вставить("field2", "value2");
Результат = КоннекторHTTP.GetJson("https://user:[email protected]/basic-auth/user/pass");
```

## Bearer-аутентификация
Параметры bearer-аутентификации можно передать в параметре `ДополнительныеПараметры.Аутентификация`.
При этом `Тип` нужно установить в значение `Bearer` и задать свойство `Токен`.

```bsl
Аутентификация = Новый Структура("Токен, Тип", "exampleBearerToken_abc1234", "Bearer");
```

## Digest-аутентификация
Параметры Digest-аутентификации можно передать в параметре `ДополнительныеПараметры.Аутентификация`.
При этом `Тип` нужно установить в значение `Digest`.
Expand Down
15 changes: 15 additions & 0 deletions src/en/CommonModules/HTTPConnector/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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
Expand Down
38 changes: 36 additions & 2 deletions src/ru/CommonModules/КоннекторHTTP/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,8 @@
// Если Тип = Digest или Basic:
// ** Пользователь - Строка - имя пользователя.
// ** Пароль - Строка - пароль пользователя.
// Если Тип = Bearer:
// ** Токен - Строка - токен.
// Если Тип = AWS4-HMAC-SHA256:
// ** ИдентификаторКлючаДоступа - Строка - идентификатор ключа доступа.
// ** СекретныйКлюч - Строка - секретный ключ.
Expand Down Expand Up @@ -613,6 +615,23 @@

КонецФункции

// Конструктор аутентификации Bearer
//
// Возвращаемое значение:
// Структура:
// * Тип - Строка - Код типа аутентификации. Всегда "Bearer".
// * Токен - Строка - Bearer-токен.
//
Функция НоваяАутентификацияBearer(Токен = "") Экспорт

Результат = Новый Структура;
Результат.Вставить("Тип", "Bearer");
Результат.Вставить("Токен", Токен);

Возврат Результат;

КонецФункции

// Конструктор аутентификации AWS4-HMAC-SHA256
//
// Возвращаемое значение:
Expand Down Expand Up @@ -1364,7 +1383,10 @@
ПодготовленныйЗапрос.СобытияНаОтвет.Добавить("ОбработкаОтветаСКодом401");
КонецЕсли;
Если ТипАутентификации = "aws4-hmac-sha256" Тогда
ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос);
ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос);
КонецЕсли;
Если ТипАутентификации = "bearer" Тогда
ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Expand Down Expand Up @@ -2748,7 +2770,19 @@

КонецФункции

#КонецОбласти
#КонецОбласти

Процедура ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос)

Если Не ПодготовленныйЗапрос.Аутентификация.Свойство("Токен") или не ЗначениеЗаполнено(ПодготовленныйЗапрос.Аутентификация.Токен) Тогда
// Токен не заполнен.
Возврат;
КонецЕсли;

ПодготовленныйЗапрос.Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", ПодготовленныйЗапрос.Аутентификация.Токен));

КонецПроцедуры


#Область КодированиеДекодированиеДанных

Expand Down

0 comments on commit f6926a7

Please sign in to comment.