AutoGRAPH.NET Service Auth — различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
(не показано 9 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | = Аутентификация = |
||
− | = Режимы с аутентификацией = |
||
+ | Аутентификация выполняется вызовом метода Login, который возвращает токен. Данный токен должен передаваться в HTTP header всех остальных запросов или в URL как параметр с названием '''session'''. |
||
− | Если в .config-файле указаны параметры [[AutoGRAPH.NET_Service|users-directory]] и [[AutoGRAPH.NET_Service|devices-directory]] - работа сервиса немного видоизменяется. Основные отличия приведены ниже. |
||
+ | Примеры кода, для реализации работы с аутентификацией: |
||
− | {| border="1" cellspacing="0" cellpadding="4" |
||
− | |- |
||
− | | style="width: 245px; background-color: rgb(238, 238, 238);" | Отличие в логике работы |
||
− | | style="width: 388px; background-color: rgb(238, 238, 238);" | Без аутентификации |
||
− | | style="width: 583px; background-color: rgb(238, 238, 238);" | С аутентификацией пользователей |
||
− | |- |
||
− | | style="width: 245px;" | Аутентификация |
||
− | | style="width: 388px;" | Не выполняется |
||
− | | style="width: 583px;" | |
||
− | В начале работы необходимо вызвать метод Login для получения токена аутентификации, который в дальнейшем передается в каждом вызове метода. |
||
+ | == JSON == |
||
− | Работа всех остальных методов без токена аутентификации невозможна. |
||
+ | В этом режиме делается запрос к методу Login для получения токена и устанавливается заголовок '''AG-TOKEN''' или добавляется параметр '''session'''. |
||
− | |- |
||
+ | <pre>WebClient client = new WebClient(); |
||
− | | style="width: 245px;" | Местоположение схем |
||
+ | client.Headers["Content-Type"] = "application/json"; |
||
− | | style="width: 388px;" | |
||
+ | client.Headers["AG-TOKEN"] = client.UploadString( // метод POST |
||
− | в каталоге, на который указывает параметр common-directory |
||
+ | "http://localhost:8300/Login", |
||
+ | "{\"UserName\":\"demo\",\"Password\":\"demo\"}").Trim('\"', '\"'); |
||
+ | // далее обычная работа с JSON |
||
− | схемы общие для всех клиентов, которые выполняют запросы анонимно |
||
+ | client.DownloadString("http://localhost:8300/EnumSchemas"); |
||
− | | style="width: 583px;" | |
||
+ | </pre> |
||
− | в каталоге каждого пользователя (например {users-directory}\username1\Download - далее структуры каталогов должны соответствовать каталогу common-directory - т.е. иметь подкаталоги Schemes, Geofences, Devices, ...). |
||
+ | или |
||
− | Пользователи не имеют доступа к схемам и прочим данных друг друга. |
||
+ | <pre>WebClient client = new WebClient(); |
||
+ | client.Headers["Content-Type"] = "application/json"; |
||
+ | var session = client.DownloadString("http://localhost:8300/Login?UserName=demo&Password=demo").Trim('\"', '\"'); // метод GET |
||
+ | // далее обычная работа с JSON |
||
− | |- |
||
+ | client.DownloadString("http://localhost:8300/EnumSchemas?session="+session); |
||
− | | style="width: 245px;" | Проверка на доступность приборов |
||
+ | </pre> |
||
− | | style="width: 388px;" | клиентам доступны все приборы, которые есть в ключе сервера |
||
− | | style="width: 583px;" | клиенту доступны только те приборы, которые заданы ему в его собственном каталоге DBF, вобщем те же приборы, которые доступны ему на сервере |
||
− | |- |
||
− | | style="width: 245px;" | Каталог данных |
||
− | | style="width: 388px;" | общий |
||
− | | style="width: 583px;" | |
||
− | общий |
||
+ | и далее все остальные методы не требуют дополнительных изменений для работы. |
||
− | |} |
||
− | = Аутентификация = |
||
− | Аутентификация выполняется вызовом метода Login, который возвращает токен. Данный токен должен передаваться в HTTP header всех остальных запросов. Примеры кода, для реализации работы с аутентификацией. |
||
+ | == WCF ''<small><span style="background-color:#FFFF00;">протокол устарел и не рекомендуется к использованию. Будет удалён с 01.06.2020</span></small>'' == |
||
− | WCF (Windows Communication Foundation) |
||
В этом режиме используется особенность библиотеки WCF с помощью behaviours extensions и message inspector's. Пример: |
В этом режиме используется особенность библиотеки WCF с помощью behaviours extensions и message inspector's. Пример: |
||
+ | <pre>var svc = new AutoGRAPHSvcClient(); |
||
+ | var bh = new AuthenticateEndpointBehavior(); |
||
+ | svc.Endpoint.Behaviors.Add(bh); |
||
+ | bh.Token = svc.Login("demo", "demo"); |
||
+ | var devices = svc.EnumDevices("DemoSchema"); |
||
+ | var geofences = svc.EnumGeofences("DemoSchema");</pre> |
||
+ | и далее все остальные методы не требуют дополнительных изменений для работы. Дополнительный файл с классами Helpers.cs прилагается в архиве. |
||
− | var svc = new AutoGRAPHSvcClient();<br/>var bh = new AuthenticateEndpointBehavior();<br/>svc.Endpoint.Behaviors.Add(bh);<br/>bh.Token = svc.Login("demo", "demo"); |
||
+ | Версия на VBA (Microsoft Excel): |
||
− | <br/>var devices = svc.EnumDevices("DemoSchema");<br/>var geofences = svc.EnumGeofences("DemoSchema"); |
||
+ | <pre>Sub WebClient() |
||
− | |||
+ | Dim iToken As String |
||
− | и далее все остальные методы не требуют дополнительных изменений для работы. |
||
+ | Dim URL As String |
||
+ | LoginURL = "http://95.213.159.8:8300/Login" |
||
+ | URL = "http://95.213.159.8:8300/" |
||
+ | iToken = GetHTTPResponseToken(LoginURL) |
||
+ | UserForm1.Label1.Caption = GetHTTPResponse(URL, iToken, "EnumDevices/Demo") |
||
+ | UserForm1.Show |
||
+ | End Sub |
||
+ | Function GetHTTPResponseToken(ByVal sURL As String) As String |
||
+ | Dim logpass As String |
||
+ | logpass = "{""UserName"":""Demo"",""Password"":""Demo""}" |
||
+ | On Error Resume Next |
||
+ | Set client = CreateObject("MSXML2.XMLHTTP") |
||
+ | With client |
||
+ | .Open "POST", sURL, False |
||
+ | .SetRequestHeader "Content-Type", "application/json" |
||
+ | .send [logpass] |
||
+ | GetHTTPResponseToken = .ResponseText |
||
+ | GetHTTPResponseToken = Mid(GetHTTPResponseToken, 2, Len(GetHTTPResponseToken) - 2) |
||
+ | End With |
||
+ | Set client = Nothing |
||
+ | End Function |
||
+ | Function GetHTTPResponse(ByVal sURL As String, Token As String, Metod As String) |
||
+ | Dim logpass As String |
||
+ | On Error Resume Next |
||
+ | Set client = CreateObject("MSXML2.XMLHTTP") |
||
+ | With client |
||
+ | .Open "GET", sURL & Metod, False |
||
+ | .SetRequestHeader "Content-Type", "application/json" |
||
+ | .SetRequestHeader "AG-TOKEN", Token |
||
+ | .send |
||
+ | GetHTTPResponse = .ResponseText |
||
+ | End With |
||
+ | Set client = Nothing |
||
+ | End Function |
||
+ | </pre> |
Текущая версия на 16:22, 21 января 2020
Аутентификация
Аутентификация выполняется вызовом метода Login, который возвращает токен. Данный токен должен передаваться в HTTP header всех остальных запросов или в URL как параметр с названием session.
Примеры кода, для реализации работы с аутентификацией:
JSON
В этом режиме делается запрос к методу Login для получения токена и устанавливается заголовок AG-TOKEN или добавляется параметр session.
WebClient client = new WebClient(); client.Headers["Content-Type"] = "application/json"; client.Headers["AG-TOKEN"] = client.UploadString( // метод POST "http://localhost:8300/Login", "{\"UserName\":\"demo\",\"Password\":\"demo\"}").Trim('\"', '\"'); // далее обычная работа с JSON client.DownloadString("http://localhost:8300/EnumSchemas");
или
WebClient client = new WebClient(); client.Headers["Content-Type"] = "application/json"; var session = client.DownloadString("http://localhost:8300/Login?UserName=demo&Password=demo").Trim('\"', '\"'); // метод GET // далее обычная работа с JSON client.DownloadString("http://localhost:8300/EnumSchemas?session="+session);
и далее все остальные методы не требуют дополнительных изменений для работы.
WCF протокол устарел и не рекомендуется к использованию. Будет удалён с 01.06.2020
В этом режиме используется особенность библиотеки WCF с помощью behaviours extensions и message inspector's. Пример:
var svc = new AutoGRAPHSvcClient(); var bh = new AuthenticateEndpointBehavior(); svc.Endpoint.Behaviors.Add(bh); bh.Token = svc.Login("demo", "demo"); var devices = svc.EnumDevices("DemoSchema"); var geofences = svc.EnumGeofences("DemoSchema");
и далее все остальные методы не требуют дополнительных изменений для работы. Дополнительный файл с классами Helpers.cs прилагается в архиве.
Версия на VBA (Microsoft Excel):
Sub WebClient() Dim iToken As String Dim URL As String LoginURL = "http://95.213.159.8:8300/Login" URL = "http://95.213.159.8:8300/" iToken = GetHTTPResponseToken(LoginURL) UserForm1.Label1.Caption = GetHTTPResponse(URL, iToken, "EnumDevices/Demo") UserForm1.Show End Sub Function GetHTTPResponseToken(ByVal sURL As String) As String Dim logpass As String logpass = "{""UserName"":""Demo"",""Password"":""Demo""}" On Error Resume Next Set client = CreateObject("MSXML2.XMLHTTP") With client .Open "POST", sURL, False .SetRequestHeader "Content-Type", "application/json" .send [logpass] GetHTTPResponseToken = .ResponseText GetHTTPResponseToken = Mid(GetHTTPResponseToken, 2, Len(GetHTTPResponseToken) - 2) End With Set client = Nothing End Function Function GetHTTPResponse(ByVal sURL As String, Token As String, Metod As String) Dim logpass As String On Error Resume Next Set client = CreateObject("MSXML2.XMLHTTP") With client .Open "GET", sURL & Metod, False .SetRequestHeader "Content-Type", "application/json" .SetRequestHeader "AG-TOKEN", Token .send GetHTTPResponse = .ResponseText End With Set client = Nothing End Function