Вверх ↑
Этот топик читают: Гость
Ответов: 21
Рейтинг: 0
#1: 2025-01-28 07:52:58 ЛС | профиль | цитата
Помогите создать прозрачную авторизацию на сервер с помощью компонента HTTPClient

При запросе
https://сервер/api/public/core/v2.1/addresses
выдаёт

"auth": {
"tokenEndpointBasic": "https://сервер:9443/auth/app/token",
"tokenEndpointEmbedded": "https://сервер:9443/auth/nego/token"
},

При обращении по https://сервер:9443/auth/app/token и вводе логина\пароля всё пускает.

Как описать компонент для входя по второй ссылке https://сервер:9443/auth/nego/token
карма: 0

0
Ответов: 4639
Рейтинг: 755
#2: 2025-02-01 23:35:15 ЛС | профиль | цитата
Вырезать адрес из ответа первого компонента и подать его на второй компонент HTTPClient вместе с данными для авторизации.

Непонятно куда именно вводятся логин и пароль при втором запросе. Имеется в виду браузер? Надо выяснить способ авторизации - Basic/Digest, тогда окно логина-пароля выдаёт браузер, а в компоненте есть соответствующие свойства.
Если логин вводится на веб-странице, то нужно выловить запрос, который после этого происходит, и повторить компонентом. Также потребуется хранение куки.
карма: 26

0
Ответов: 21
Рейтинг: 0
#3: 2025-02-03 05:14:22 ЛС | профиль | цитата
Вырезка из справки к системе:

Чтобы получить токен доступа, необходимо выполнить запрос на URL, который зависит от схемы аутентификации в сервере аутентификации. Конкретный адрес URL можно получить из ответа на запрос https://сервер/api/public/core/v2.1/addresses адресу конечной точки для получения токена с аутентификацией по встроенной схеме соответствует значение поля tokenEndpointEmbedded, а по по схеме Basic — tokenEndpointBasic.

Независимо от схемы аутентификации, для получения токена необходимо отправить POST-запрос на выбранный адрес конечной точки получения токена.

При использовании встроенной (Kerberos/NTLM) аутентификации обычно не требуется явно задавать учетные данные: вся необходимая информация будет получена из операционной системы для текущего пользователя. Процедура встроенной аутентификации может потребовать несколько запросов со стороны клиента. Реализации http-запросов на языках программирования с поддержкой встроенной аутентификации автоматически обрабатывают процедуру аутентификации из нескольких запросов и в качестве результата отдают ответ на последний запрос этой процедуры.

При использовании данной схемы аутентификации клиентский компьютер должен быть зарегистрирован в домене, находится внутри локальной сети intranet (иметь доступ к контроллеру домена) и обращаться напрямую к адресу получения токенов доступа (без прокси серверов, так как они могут нарушить механизм аутентификации). Клиентские библиотеки, через которые осуществляется HTTP запрос должны поддерживать работу с данной схемой аутентификации (Kerberos/NTLM в зависимости от платформы).

Фактически используемая схема аутентификации зависит от серверной платформы. Для ОС Windows используется NTLM аутентификация, для Linux используется Kerberos (Negotiate).

-----
По схеме Basic при явном вводе логина и пароля, всё работает. Как описать с помощью компонента NTLM аутентификацию?


На странице входа есть кнопка

<div class="button" data-authtype="Negotiate" onclick="authWindows()" style="background-image: url(./images/pc.png)">
<div class="button-hint">
<p><b>Вход со стационарного рабочего места в локальной сети.</b></p>
<div>Протокол проверки подлинности Negotiate.</div>
</div>
</div>

Редактировалось 1 раз(а), последний 2025-02-03 10:11:33
карма: 0

0
Ответов: 866
Рейтинг: 186
#4: 2025-02-03 12:11:19 ЛС | профиль | цитата
rav писал(а):
При использовании встроенной (Kerberos/NTLM) аутентификации обычно не требуется явно задавать учетные данные: вся необходимая информация будет получена из операционной системы для текущего пользователя. Процедура встроенной аутентификации может потребовать несколько запросов со стороны клиента. Реализации http-запросов на языках программирования с поддержкой встроенной аутентификации автоматически обрабатывают процедуру аутентификации из нескольких запросов и в качестве результата отдают ответ на последний запрос этой процедуры.

При использовании данной схемы аутентификации клиентский компьютер должен быть зарегистрирован в домене, находится внутри локальной сети intranet (иметь доступ к контроллеру домена) и обращаться напрямую к адресу получения токенов доступа (без прокси серверов, так как они могут нарушить механизм аутентификации). Клиентские библиотеки, через которые осуществляется HTTP запрос должны поддерживать работу с данной схемой аутентификации (Kerberos/NTLM в зависимости от платформы).

Фактически используемая схема аутентификации зависит от серверной платформы. Для ОС Windows используется NTLM аутентификация, для Linux используется Kerberos (Negotiate).

Несколько вопросов
1.Это корпоративный сервис или публичный?
2.Ты можешь зайти на эти адреса в обычном браузере?
3.Как обычно используются данные API ? Откуда берутся логин и пароль?
4.Логин и пароль совпадает с логином и паролем пользователя windows?
5.Что ты хочешь скачать, закачать, получить, увидеть или что-то другое?
карма: 18

0
Ответов: 4639
Рейтинг: 755
#5: 2025-02-03 20:37:09 ЛС | профиль | цитата
NTLM аутентификация в компоненте не реализована. Хотя используемым API поддерживается. Можешь попробовать посмотреть в коде как реализовано.
Или используй Basic аутентификацию.
карма: 26

0
Ответов: 21
Рейтинг: 0
#6: 2025-02-04 03:34:36 ЛС | профиль | цитата
Gunta писал(а):

Несколько вопросов

1.Это корпоративный сервис или публичный?
Корпоративный сервис.

2.Ты можешь зайти на эти адреса в обычном браузере?
Да могу, первое открывается окно авторизации.

3.Как обычно используются данные API ? Откуда берутся логин и пароль?
Веб-API построено на базе HTTP-запросов и описано в соответствии со спецификацией OpenAPI 3.0
Через браузер, два способа входа . 1 - с помощью NTLM аутентификация (логин и пароль совпадает с пользователем windows, ничего не вводишь, берутся из windows) 2 - появляется окно ввода логина и пароля (Basic аутентификация).

4.Логин и пароль совпадает с логином и паролем пользователя windows?
Да.

5.Что ты хочешь скачать, закачать, получить, увидеть или что-то другое?
После авторизации выполняются запросы (в виде URL ссылки) к сервису и он предоставляет информацию в виде json файла.

Редактировалось 2 раз(а), последний 2025-02-04 03:35:03
карма: 0

0
Ответов: 866
Рейтинг: 186
#7: 2025-02-04 05:21:21 ЛС | профиль | цитата
rav, Два варианта. Не забудь вставить свою URL-ссылку.
1.

Add(MainForm,14189840,182,203)
{
Width=874
Height=471
Color=-16777204
Caption="Windows Authenticate"
BorderStyle=3
Position=1
}
Add(Button,2266488,245,203)
{
Left=5
Top=10
Width=105
Caption="Получить JSON"
link(onClick,4794102:doString,[])
}
Add(Memo,2538246,489,203)
{
Left=4
Top=40
Width=860
Height=400
Color=-16777201
Ctl3D=1
ScrollBars=3
}
Add(WinExec,11401622,364,189)
{
FileName="powershell"
Mode=0
Action="runas"
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
link(onConsoleResult,9340663:doWork2,[])
link(onConsoleError,9340663:doWork3,[(410,216)])
}
Add(FormatStr,4794102,301,203)
{
DataCount=1
Mask="$cred = Get-Credential\r\nInvoke-WebRequest -Uri '%1' -Credential $cred\r\n\r\n"
link(onFString,11401622:doConsoleExec,[])
link(Str1,817807:Text,[])
}
Add(HubEx,9340663,406,203)
{
link(onEvent,13018108:doCharset,[])
}
Add(VisualStrings,817807,301,133)
{
Lines=#35:https://сервер:9443/auth/nego/token|
Width=242
}
Add(Charset,13018108,427,203)
{
link(onCharset,2538246:doAdd,[])
}

2.

Add(MainForm,14189840,196,168)
{
Width=874
Height=471
Color=-16777204
Caption="Windows Authenticate"
BorderStyle=3
Position=1
}
Add(Button,2266488,259,168)
{
Left=5
Top=10
Width=105
Caption="Получить JSON"
link(onClick,4794102:doString,[])
}
Add(Memo,2538246,503,168)
{
Left=4
Top=40
Width=860
Height=400
Color=-16777201
Ctl3D=1
ScrollBars=3
}
Add(WinExec,11401622,378,154)
{
FileName="powershell"
Mode=0
Action="runas"
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
link(onConsoleResult,9340663:doWork2,[])
link(onConsoleError,9340663:doWork3,[(424,181)])
}
Add(FormatStr,4794102,315,168)
{
DataCount=1
Mask="$wc = New-Object System.Net.WebClient\r\n$wc.UseDefaultCredentials = $true\r\n$wc.DownloadString('%1')\r\n\r\n"
link(onFString,11401622:doConsoleExec,[])
link(Str1,9583259:Text,[])
}
Add(HubEx,9340663,420,168)
{
link(onEvent,13018108:doCharset,[])
}
Add(Charset,13018108,441,168)
{
link(onCharset,2538246:doAdd,[])
}
Add(VisualStrings,9583259,315,112)
{
Lines=#35:https://сервер:9443/auth/nego/token|
Width=242
}

карма: 18

0
Ответов: 21
Рейтинг: 0
#8: 2025-02-06 06:04:25 ЛС | профиль | цитата
Создал с помощью powershell таким образом

Add(MainForm,2953706,126,147)
{
}
Add(FormatStr,3846823,273,119)
{
DataCount=1
Mask="[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Tls11;\r\nInvoke-RestMethod -Uri "%1" -Method Post -UseDefaultCredentials -ErrorAction Stop | % {$_.access_token};"
link(onFString,2643785:doConsoleExec,[])
link(Str1,15597898:Var2,[])
}
Add(Charset,11637533,364,119)
{
Point(doCharset)
link(onCharset,13566861:doReplace,[])
}
Add(WinExec,2643785,315,105)
{
FileName="powershell"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
link(onConsoleResult,11637533:doCharset,[])
link(onConsoleError,8493079:doData,[(356,132)(356,167)])
}
Add(Replace,13566861,406,119)
{
SubStr="\r\n"
DestStr="'"
link(onReplace,13269493:doValue,[])
}
Add(GlobalVar,13269493,448,119)
{
Name="token"
}
Add(GlobalVar,5405301,406,161)
{
Name="token"
}
Add(DoData,8493079,364,161)
{
link(onEventData,5405301:doValue,[])
}
Add(VisualStrings,9615153,273,70)
{
Lines=#14:https://Server|
Width=81
}
Add(FormatStr,13463142,301,294)
{
DataCount=3
Mask="[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Tls11;\r\n$headers = @{'Accept' = '*/*'; 'Accept-Language' = 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'; 'Authorization' = 'Bearer %3; 'Content-Type' = 'application/json; charset=UTF-8';};\r\nInvoke-WebRequest -Uri %1api/public/measurement-values/v2.5/numeric/%2 -Headers $headers -ErrorAction Stop | ConvertFrom-Json | % {$_.value.value};\r\n"
Point(FString)
link(onFString,11567921:doConsoleExec,[])
link(Str1,15597898:Var3,[(307,103)])
link(Str2,761398:Var,[])
link(Str3,5879953:Var3,[(321,278)])
}
Add(GlobalVar,761398,308,252)
{
Name="строка запроса"
}
Add(Charset,7395113,392,294)
{
Point(doCharset)
link(onCharset,8905290:doMessage,[])
}
Add(WinExec,11567921,343,280)
{
FileName="powershell"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
link(onConsoleResult,7395113:doCharset,[])
link(onConsoleError,9397694:doData,[(384,307)(384,349)])
}
Add(GlobalVar,1896148,252,252)
{
Name="token"
}
Add(If_else,33723,252,287)
{
link(onFalse,13463142:doString,[])
link(Op1,5879953:Var2,[])
}
Add(GetDataEx,15597898,273,98)
{
link(Data,9615153:Text,[])
}
Add(GetDataEx,5879953,252,273)
{
link(Data,1896148:Var,[])
}
Add(Button,1154534,231,119)
{
Left=40
Top=20
Width=85
Caption="Авторизация"
link(onClick,3846823:doString,[])
}
Add(Button,1670483,203,287)
{
Left=40
Top=65
Caption="Запрос"
link(onClick,33723:doCompare,[])
}
Add(Message,8905290,441,294)
{
}
Add(GlobalVar,12341823,441,343)
{
Name="token"
}
Add(DoData,9397694,392,343)
{
link(onEventData,12341823:doValue,[])
}
Add(InfoTip,12061114,224,28)
{
Info=#11:авторизации|51:делается один раз или если вышло время жизни токена|
Width=316
Height=172
}
Add(InfoTip,1940029,196,224)
{
Info=#6:Запрос|
Width=309
Height=172
}

карма: 0

0
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)