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

Материал из TK
Перейти к: навигация, поиск
(JSON)
(JSON)
Строка 71: Строка 71:
   
 
и далее все остальные методы не требуют дополнительных изменений для работы.
 
и далее все остальные методы не требуют дополнительных изменений для работы.
  +
  +
Версия на VBA (Microsoft Excel):
  +
<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>

Версия 12:02, 30 сентября 2015

Режимы с аутентификацией

Если в .config-файле указаны параметры users-directory и devices-directory - работа сервиса немного видоизменяется. Основные отличия приведены ниже.

Отличие в логике работы Без аутентификации С аутентификацией пользователей
Аутентификация Не выполняется

В начале работы необходимо вызвать метод Login для получения токена аутентификации, который в дальнейшем передается в каждом вызове метода.

Работа всех остальных методов без токена аутентификации невозможна.

Местоположение схем

в каталоге, на который указывает параметр common-directory

схемы общие для всех клиентов, которые выполняют запросы анонимно

в каталоге каждого пользователя (например {users-directory}\username1\Download - далее структуры каталогов должны соответствовать каталогу common-directory - т.е. иметь подкаталоги Schemes, Geofences, Devices, ...).

Пользователи не имеют доступа к схемам и прочим данных друг друга.

Проверка на доступность приборов клиентам доступны все приборы, которые есть в ключе сервера клиенту доступны только те приборы, которые заданы ему в его собственном каталоге DBF, вобщем те же приборы, которые доступны ему на сервере
Каталог данных общий

общий

Аутентификация

Аутентификация выполняется вызовом метода Login, который возвращает токен. Данный токен должен передаваться в HTTP header всех остальных запросов. Примеры кода, для реализации работы с аутентификацией.

WCF (Windows Communication Foundation)

В этом режиме используется особенность библиотеки 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 прилагается в архиве.

JSON

В этом режиме делается запрос к методу Login для получения токена и устанавливается заголовок AG-TOKEN.

WebClient client = new WebClient();
client.Headers["Content-Type"] = "application/json";
client.Headers["AG-TOKEN"] = client.UploadString(
   "http://localhost:8300/Login",
   "{\"UserName\":\"demo\",\"Password\":\"demo\"}").Trim('\"', '\"');

// далее обычная работа с JSON

client.DownloadString("http://localhost:8300/EnumSchemas");

и далее все остальные методы не требуют дополнительных изменений для работы.

Версия на 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