AutoGRAPH.NET Service Auth — различия между версиями
Admin (обсуждение | вклад) (→JSON) |
Admin (обсуждение | вклад) |
||
| Строка 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 для получения токена аутентификации, который в дальнейшем передается в каждом вызове метода. |
||
| − | |||
| − | Работа всех остальных методов без токена аутентификации невозможна. |
||
| − | |||
| − | |- |
||
| − | | style="width: 245px;" | Местоположение схем |
||
| − | | style="width: 388px;" | |
||
| − | в каталоге, на который указывает параметр common-directory |
||
| − | |||
| − | схемы общие для всех клиентов, которые выполняют запросы анонимно |
||
| − | |||
| − | | style="width: 583px;" | |
||
| − | в каталоге каждого пользователя (например {users-directory}\username1\Download - далее структуры каталогов должны соответствовать каталогу common-directory - т.е. иметь подкаталоги Schemes, Geofences, Devices, ...). |
||
| − | |||
| − | Пользователи не имеют доступа к схемам и прочим данных друг друга. |
||
| − | |||
| − | |- |
||
| − | | style="width: 245px;" | Проверка на доступность приборов |
||
| − | | style="width: 388px;" | клиентам доступны все приборы, которые есть в ключе сервера |
||
| − | | style="width: 583px;" | клиенту доступны только те приборы, которые заданы ему в его собственном каталоге DBF, вобщем те же приборы, которые доступны ему на сервере |
||
| − | |- |
||
| − | | style="width: 245px;" | Каталог данных |
||
| − | | style="width: 388px;" | общий |
||
| − | | style="width: 583px;" | |
||
| − | общий |
||
| − | |||
| − | |} |
||
| − | |||
| − | = Аутентификация = |
||
| − | |||
| − | Аутентификация выполняется вызовом метода Login, который возвращает токен. Данный токен должен передаваться в HTTP header всех остальных запросов. Примеры кода, для реализации работы с аутентификацией. |
||
== WCF (Windows Communication Foundation) == |
== WCF (Windows Communication Foundation) == |
||
| Строка 71: | Строка 32: | ||
или |
или |
||
| − | |||
<pre>WebClient client = new WebClient(); |
<pre>WebClient client = new WebClient(); |
||
client.Headers["Content-Type"] = "application/json"; |
client.Headers["Content-Type"] = "application/json"; |
||
| Строка 83: | Строка 43: | ||
Версия на VBA (Microsoft Excel): |
Версия на VBA (Microsoft Excel): |
||
| − | <pre> |
+ | <pre>Sub WebClient() |
| − | Sub WebClient() |
||
Dim iToken As String |
Dim iToken As String |
||
Dim URL As String |
Dim URL As String |
||
Версия 19:33, 22 марта 2019
Аутентификация
Аутентификация выполняется вызовом метода Login, который возвращает токен. Данный токен должен передаваться в HTTP header всех остальных запросов или в URL как параметр с названием session.
Примеры кода, для реализации работы с аутентификацией:
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 или добавляется параметр 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);
и далее все остальные методы не требуют дополнительных изменений для работы.
Версия на 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