Лучший способ получить данные в Android-приложение? - PullRequest
3 голосов
/ 26 апреля 2010

Просто немного фона. Я опытный программист на 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 ]

1 голос
/ 13 мая 2010

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

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

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

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

1 голос
/ 26 апреля 2010

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

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

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

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

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

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

0 голосов
/ 14 мая 2010

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

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

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

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

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

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

0 голосов
/ 14 мая 2010

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

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

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

0 голосов
/ 26 апреля 2010

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

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

...