Просветите как лучше оформить взаимодействие мобильного приложения на xamarin с бд на хостинге

прошу прощения, может быть за глупый вопрос. Осваиваю xamarin, есть мобильное приложение, в нем есть поля login, pass. Есть хостинг на нем БД, phpadmin. Мне нужно из мобильного приложения стучаться в базу данных и проверять сочетания логина и пароля, и иметь возможность записать данные. Напрямую как я начитался ) обратится к сереверу с бд из мобильного приложения нельзя(порадуйте если это не так). Есть вариант передавать параметры из моб приложения ( login, pass) в json, его обрабатывать, получать данные из БД, и в ответ отдавать другой json. Я новичок в этой сфере, хочется совета, это единственно верный вариант и оптимальный? И как реализовать его до конца не пойму. На С# смог открыть локально json и обратится к базе получить данные, а как все это автоматизировать что для этого нужно. Хотя бы в краце просветите в каком направлении двигаться. Заранее спасибо!


Ответы (1 шт):

Автор решения: OXYGEN

Раскажу как это работает у нас :

  1. авторизация и получение данных работает через веб сервис написаный на ASP.NET принимаюший запросы с SAOP + XML

Клиент -> веб сервис -> база данных

вот пример авторизации : Soap Запрос на авторизацию

POST /webSite/index.asmx HTTP/1.1
Host: your.host.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
Authorization: Basic 0YLQtdGB0YI6dGVzdA== // авторизация basic 
SOAPAction: "w/GetID"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetID xmlns="w">
      <ts>unsignedLong(Time Stamp)</ts> //по прошествию 15секуд запрос будет не действительный
    </GetID>
  </soap:Body>
</soap:Envelope>

Ответ Сервера :

если авторизация прошла хорошо

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetIDResponse xmlns="w">
      <GetIDResult>True/false</GetIDResult>// если логин и пасс совапали 
      <Tk>d85000088a08109374ef031598822ea5cb087464</Tk> // токен сервера генерируется автоматичиски при успешном подключении алгоритм SHa1 login=test , pass test + дата 23.06.2020 тоесть он валидный будет только сутки 
      <Key>string</Key> Ключь AES для шифрования данных между клиентом и сервером на основе этого токена 
    </GetIDResponse>
  </soap:Body>
</soap:Envelope>

Далее все запросы на сервер идут по такому же принцепу , но через токен d85000088a08109374ef031598822ea5cb087464 и запршашиваются данных указывая в загаловке HTTP post и метод для получения данных, получаем данные в зашифрованном виде.

→ Ссылка