Android: как ограничить доступ к ContentProvider

Можно ли добавить фильтр к поставщику контента, чтобы он принимал только запросы, исходящие от набора известных идентификаторов приложений? Например, если com.domain1.app1 и com.domain2.app2 — это два приложения, которым я доверяю, я бы хотел, чтобы они читали мои данные. Любое другое приложение следует держать снаружи. Что-то вроде фильтра намерений, но связанного с входящим запросом от других приложений.

Я знаю о том же ключе подписи, но это не то, что мне нужно.


person user3290180    schedule 16.06.2016    source источник
comment
Для этого в Android ничего не заложено. Вы можете попробовать Binder.getCallingUid() внутри соответствующего метода ContentProvider (например, query()) и посмотреть, дает ли он вам UID вызывающего. Если это так, вы можете использовать это с PackageManager, чтобы определить идентификаторы приложений, связанные с этим UID. Но я забыл, работает ли Binder.getCallingUid() внутри ContentProvider, поэтому я не уверен, что это сработает.   -  person CommonsWare    schedule 16.06.2016
comment
Возможный дубликат Android Поставщики содержимого. Можно ли ограничить поставщика набором приложений, написанных не мной?. В любом случае, согласно ContentProvider и getCallingUid() с использованием Binder.getCallingUid() должно сработать.   -  person Marten    schedule 20.06.2016


Ответы (1)


Если приложение провайдера не указывает никаких разрешений, другие приложения не имеют доступа к данным провайдера. Однако компоненты в приложении провайдера всегда имеют полный доступ для чтения и записи, независимо от указанных разрешений.

Как показано здесь.

person Måns Thörnvik    schedule 25.09.2017