Лучший способ получить данные в приложение для Android?

Просто немного фона. Я опытный программист сервера asp.net/c#/sql, который изучал Android менее 2 дней.

У нас есть существующий веб-сайт.net, который хранит список местоположений в MS SQL Server 2008, и я пытаюсь создать приложение для Android, которое получает эти местоположения и отображает их на карте Google.

Вопрос в том, как подключить приложение к базе данных SQL. Я предполагаю, что есть несколько вариантов....

1) Какая-то прямая связь между приложением и удаленной БД.

2) Создание некоторого промежуточного уровня с использованием asp.net, который преобразовал бы данные в нечто более удобное для использования в Java-коде в приложении для Android (имейте в виду, что я практически не знаю Java), точно так же, как у нас.net код, который поставляет JSON для наших веб-приложений.

3) Создание какого-либо веб-сервиса, который просто возвращает результаты XML с веб-сервера. Понятия не имею, как бы это защитить, чтобы только приложение Android могло запрашивать данные.

Любая помощь или совет по передовой практике были бы действительно полезны. Я думаю, что мне просто нужно указать общее направление хорошей стратегии, и я могу решить это.

5 ответов

Решение

Ваша проблема безопасности связана с сетевой инфраструктурой и протоколами, а не с Android. OAUTH становится стандартным способом сделать это, и, используя в качестве примера Google, возможно, лучшим аналогом будет доступ к Google Docs?

больше здесь:

Реализация рукопожатия и т. Д. Может занять немного времени, в зависимости от того, насколько безопасным вы хотите его сделать. Опять же, это на самом деле не "штука для Android", это скорее архитектурная задача, и как только вы примете некоторые из этих архитектурных решений, вы сможете реализовать то, что решили сделать на Android или чем-то еще.

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

Понятия не имею, как бы это защитить, чтобы только приложение Android могло запрашивать данные.

Ваша проблема больше, чем это.

Это не относится только к пункту (3), оно касается любого возможного подхода, который вы собираетесь выбрать.

  • Если вы предоставляете какие-либо данные в Интернете, к ним можно получить доступ с помощью аутентификации или без нее.
  • Если к нему обращаются с аутентификацией, это или одна учетная запись для каждого пользователя, или одна для многих пользователей.
  • Когда у пользователя есть учетные данные, он может использовать их по своему усмотрению, вы не можете ограничить его, кроме как полностью блокируя сами учетные данные.

Теперь вы идете по этому пути, то есть один учетные данные, которые действительны для всех пользователей, то есть приложение получило его и использует его для получения данных. То, что пользователь сам не может сейчас это не имеет значения.

Помните: безопасность через неизвестность просто не работает. Мрачность - это всего лишь "еще одно раздражение", если вы хотите сломаться, это похоже на темную комнату с ценностями внутри: тьма не помогает, но это не оправдывает отсутствие замка. И кто-то скоро что-то украдет, это просто вопрос времени.

Под вашей проблемой защиты данных то, что я бы сделал для решения вашей задачи, будет состоять из следующих шагов:

  • Используйте веб-сервис json для связи между мобильным устройством и вашей БД. Соединение с БД необходимо будет восстанавливать каждый раз, когда вы обращаетесь к БД из-за нестабильного сетевого подключения мобильных устройств. Веб-сервис хорошо переносит один вопрос в БД.
  • Используйте Google GSON, чтобы разобрать JSON в объекты данных Java для обработки их в приложении.
  • Создайте MapView с вашим собственным наложением для отображения элементов на карте.

Проблема безопасности - это проблема, о которой я много думал. Если вы хотите ограничить доступ к базе данных, вам необходимо, чтобы приложение имело какой-то ключ для аутентификации на веб-сервере. Проблема в том, что кто-то может просто открыть ваше приложение и найти этот ключ, а затем переделать трафик, используемый в вашем приложении. Вы можете использовать ключ, чтобы установить соединение https с вашим веб-интерфейсом. Это запрещает другим подключаться к сетевому соединению, но человек, владеющий телефоном, всегда может получить доступ к ключу.

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

  • зашифруйте ключ внутри вашего приложения, это затруднит быстрый поиск в файлах классов и простое извлечение ключа. Но это только еще один слой сокрытия, потому что ключ для расшифровки должен быть и в вашем приложении.
  • сгенерируйте второй ключ на основе данных телефона, добавьте хэш imei, номер телефона и т. д. Проблема заключается в том, что эти данные должны быть первоначально зарегистрированы на сервере, поэтому их можно просто подделать.

Если вы просто хотите, чтобы ваши данные были защищены от сбора через бот, заставьте сервер отвечать только на запросы, которые, кажется, поступают с мобильного телефона. Блокировка отдельных IP-адресов, которые делают сотни вызовов веб-сервису и т. Д.

На самом деле вы не можете подключиться к удаленной БД, особенно если это база данных MS SQL (android может работать только с SQLite).

Наилучшим вариантом, зная, что вы хотите защитить свои данные, является создание интерфейса Java на стороне сервера, который будет иметь доступ к вашей базе данных.

Затем вы можете выполнить некоторые RMI или использовать сокеты для отправки и получения данных (включая зашифрованные данные).

Собственная поддержка LDAP для Android может появиться довольно скоро ( многие хотят этого), что может помочь в обеспечении безопасности (т. Е. Использование вашего Exchange Server для проверки различных учетных данных пользователя вместо использования одного для приложения)

Между тем, правда, что данные могут быть более доступными, чем должны. Это чувствительно?

Другие вопросы по тегам