AutoGRAPH.NET Service Auth — различия между версиями

Материал из TK
Перейти к: навигация, поиск
 
(не показано 7 промежуточных версий этого же участника)
Строка 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
в каталоге, на который указывает параметр&nbsp;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 всех остальных&nbsp;запросов. Примеры кода, для реализации работы с аутентификацией.
 
   
  +
== WCF&nbsp;''<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();
 
 
<syntaxhighlight lang="csharp">
 
var svc = new AutoGRAPHSvcClient();
 
 
var bh = new AuthenticateEndpointBehavior();
 
var bh = new AuthenticateEndpointBehavior();
 
svc.Endpoint.Behaviors.Add(bh);
 
svc.Endpoint.Behaviors.Add(bh);
 
bh.Token = svc.Login("demo", "demo");
 
bh.Token = svc.Login("demo", "demo");
  +
var devices = svc.EnumDevices("DemoSchema");
  +
var geofences = svc.EnumGeofences("DemoSchema");</pre>
   
var devices = svc.EnumDevices("DemoSchema");
 
var geofences = svc.EnumGeofences("DemoSchema");
 
</syntaxhighlight>
 
 
и далее все остальные методы не требуют дополнительных изменений для работы. Дополнительный файл с классами Helpers.cs прилагается в архиве.
 
и далее все остальные методы не требуют дополнительных изменений для работы. Дополнительный файл с классами Helpers.cs прилагается в архиве.
   
  +
Версия на VBA (Microsoft Excel):
== JSON ==
 
  +
<pre>Sub WebClient()
 
  +
Dim iToken As String
В этом режиме делается запрос к методу Login для получения токена и устанавливается заголовок AG-TOKEN.
 
  +
Dim URL As String
 
  +
LoginURL = "http://95.213.159.8:8300/Login"
<syntaxhighlight lang="csharp">
 
  +
URL = "http://95.213.159.8:8300/"
WebClient client = new WebClient();
 
  +
iToken = GetHTTPResponseToken(LoginURL)
client.Headers["Content-Type"] = "application/json";
 
  +
UserForm1.Label1.Caption = GetHTTPResponse(URL, iToken, "EnumDevices/Demo")
client.Headers["AG-TOKEN"] = client.UploadString("http://localhost:8300/Login", "{\"UserName\":\"demo\",\"Password\":\"demo\"}").Trim('\"', '\"');
 
  +
UserForm1.Show
 
  +
End Sub
// далее обычная работа с JSON
 
  +
Function GetHTTPResponseToken(ByVal sURL As String) As String
 
  +
Dim logpass As String
client.DownloadString("http://localhost:8300/EnumSchemas");
 
  +
logpass = "{""UserName"":""Demo"",""Password"":""Demo""}"
</syntaxhighlight>
 
  +
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