http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

Руководство по безопасности Android V4 - Контроль доступа, AES и TLS / SSL

  1. Включение диспетчера доступа не включает SSL / TLS или AES
  2. Подписывайся
  3. Отказаться от подписки
  4. Публиковать
  5. Присутствие
  6. Место хранения
  7. Группы каналов
  8. PubNub Access Manager
  9. Понимание иерархии разрешений диспетчера доступа
  10. Шифрование на уровне сообщений с помощью AES256
  11. Безопасность транспортного уровня с TLS и SSL
  12. Примеры кода PubNub Security для Android V4
  13. Для инициализации с секретным ключом:
  14. PubNub Access Manager - административная конфигурация
  15. Рабочие уровни PAM
  16. Обработка ошибок в доступе
  17. Использование PAM с группами каналов вместо каналов
  18. Предоставить доступ для управления группой каналов
  19. Отменить доступ к группе каналов
  20. Шифрование на уровне сообщений с помощью AES256
  21. Безопасность транспортного уровня с TLS и SSL

Включение диспетчера доступа не включает SSL / TLS или AES

Операция PubNub / сопоставления разрешений

Требуется разрешение на эксплуатацию

Подписывайся

Подписаться на канал / ChannelGroup

Разрешение на чтение на канале подписки

Подписаться на присутствие Channel / ChannelGroup

Разрешение на чтение на канале присутствия

Отказаться от подписки

Отписаться от Channel / ChannelGroup

Разрешение на чтение на канале подписки

Отписаться от присутствия Channel / ChannelGroup

Разрешение на чтение на канале присутствия

Публиковать

Опубликовать на канале

Разрешение на запись на канале подписки

Присутствие

Здесь и сейчас

Разрешение на чтение на канале

Где сейчас

Разрешение на чтение на канале присутствия

государственный

Разрешение на чтение на канале

Место хранения

история

Разрешение на чтение на канале подписки

Группы каналов

Добавить каналы в группы каналов

Управление разрешением на группу каналов

Список каналов групп каналов

Разрешение на чтение для группы каналов

Удалить каналы из групп каналов

Управление разрешением на группу каналов

Удалить группы каналов

Управление разрешением на группу каналов

PubNub обеспечивает встроенную защиту корпоративного уровня с детальным контролем доступа ко всем приложениям PubNub с помощью PubNub Access Manager, шифрования на уровне сообщений с AES256 и безопасности на транспортном уровне с TLS и SSL. Перед использованием этой функции ее необходимо включить в консоли администратора PubNub.

PubNub Access Manager

PubNub Access Manager (PAM) расширяет существующую инфраструктуру безопасности PubNub, позволяя разработчикам создавать и обеспечивать безопасный доступ к каналам в сети реального времени PubNub. PAM предоставляет возможность обеспечивать безопасность на трех разных уровнях и в любой комбинации:

  • заявка
  • канал
  • Индивидуальный пользователь

Доступ к ресурсу предоставляется или запрещается через токен авторизации (он же ключ авторизации), установленный в настоящее время на клиенте.

PAM позволяет разработчику генерировать произвольное значение для ключа авторизации, используя метод по своему выбору. Это позволяет интегрировать приложение PubNub с уже существующей схемой аутентификации пользователя или органом безопасности.

Например, OAuth и Facebook Connect предоставляют свой собственный токен аутентификации, который можно повторно использовать в качестве ключа авторизации PAM. В качестве альтернативы пользовательский uuid (взятый из ранее существовавшей БД) также может быть повторно использован (или хеширован) и использован в качестве ключа авторизации PAM.

Затем ваше приложение будет использовать функциональность предоставления или отзыва PAM для включения или отключения доступа к определенному каналу на основе значения ключа авторизации подключающегося клиента PubNub.

На приведенном ниже рисунке показано использование центра безопасности, использующего API-интерфейс PubNub Access Manager для администрирования привилегий приложений и делегирования токенов авторизации пользователям:

На приведенном ниже рисунке показано использование центра безопасности, использующего API-интерфейс PubNub Access Manager для администрирования привилегий приложений и делегирования токенов авторизации пользователям:

  • Орган безопасности выдает грант PAM, чтобы разрешить привилегии на основе пользовательского токена аутентификации.
  • Пользователь запрашивает авторизацию у службы безопасности.
  • Администрация безопасности делегирует auth_key пользователю.
  • Пользователь отправляет учетные данные в PubNub и подписывается на канал.
  • PubNub проверяет привилегии пользователя и отправляет ожидающие сообщения.

Понимание иерархии разрешений диспетчера доступа

PAM работает по схеме разрешений «только для грантов» (белый список), где первый грант (правило), найденный в иерархии, «выигрывает». Разрешения оцениваются как для публикации, так и для подписки на основе этой иерархии:

  • Уровень ключа подписки - (доступ для всех пользователей на всех каналах)
  • Уровень канала - (доступ предоставляется любому пользователю, но только одному конкретному каналу)
  • Канал и ключ авторизации (доступ предоставлен конкретному пользователю (-ам) на данном канале)

Важно отметить, что более широкие уровни переопределяют более детальные уровни - это имеет смысл, если вы думаете об этом как о «первом выигравшем правиле соответствия». Например, привилегии, предоставляемые ключу подписки приложения, всегда имеют приоритет над привилегиями, предоставленными для канала или ключа авторизации. Кроме того, когда Access Manager впервые включен, ранее не было предоставлено никаких разрешений, поэтому все попытки чтения (подписки) и записи (публикации) в канал будут терпеть неудачу, пока не будет предоставлено явное (неявный белый список).

Шифрование на уровне сообщений с помощью AES256

Advanced Encryption Standard (AES) - это спецификация для шифрования электронных данных. Он обеспечивает функциональность симметричного шифрования (через общий ключ шифрования), достаточно прочную, чтобы быть сертифицированной для использования правительством США для получения информации совершенно секретного уровня.

Клиентские библиотеки PubNub предлагают встроенное 256-битное шифрование AES. Данные зашифровываются во время публикации до того, как они будут получены сетью реального времени PubNub, и остаются зашифрованными, поскольку они направляются через несколько центров обработки данных и регионов. Это означает, что незашифрованные данные никогда не покидают доверенный орган, обеспечивая полный цикл шифрования данных.

Сложность шифрования и дешифрования данных встроена в клиентские библиотеки PubNub (поскольку наши библиотеки с открытым исходным кодом, вы можете посмотреть, как мы это сделали). Шифрование и дешифрование между всеми клиентскими библиотеками PubNub полностью поддерживается. Например, публиковать зашифрованные из Ruby, получать данные и расшифровывать на Android, iOS и JavaScript.

Важно, чтобы cipherKey держался в секрете и чтобы ключ никогда не передавался по сети в незашифрованном виде.

Безопасность транспортного уровня с TLS и SSL

Безопасность транспортного уровня (TLS) и его предшественник Secure Socket Layer (SSL) - это методы шифрования сообщений при передаче через Интернет. Использование PubNub TLS / SSL обеспечивает защиту клиентских сообщений при отправке в сеть реального времени PubNub и из нее. Это предотвращает просмотр перехваченных сообщений посторонними лицами.

Просто включите TLS / SSL при инициализации экземпляра клиента, а API PubNub позаботится обо всем остальном.

Если включен протокол TLS / SSL, ваши данные зашифровываются при прохождении через Интернет, но снова дешифруются, обрабатываются и шифруются при прохождении через сеть PubNub и обратно. Это ограничение TLS / SSL. Для обеспечения наивысших уровней целостности сообщений следует использовать TLS / SSL в сочетании с шифрованием на уровне сообщений PubNub с AES, чтобы гарантировать сквозную безопасность данных.

Примеры кода PubNub Security для Android V4

PubNub Access Manager - Конфигурация на стороне потребителя

Использование PubNub Access Manager (PAM) требует инициализации вашего экземпляра ТОЛЬКО secretKey, если вы собираетесь выполнять административные функции PAM, такие как предоставление и отзыв. Если ваш клиентский экземпляр будет выполнять только функции потребителя PAM, такие как подписка, вызовы истории / хранения, публикация и т. Д., То вам не нужно будет инициализироваться с помощью secretKey.

Любой пользователь с SecretKey может предоставить и отозвать разрешения для вашего приложения. Никогда не позволяйте обнаруживать ваш secretKey, а только обмениваться им / доставлять его надежно. Используйте secretKey только на защищенных серверных платформах.

Когда вы запускаете с secretKey, вы получаете права root для Access Manager. С помощью этой функции вам не нужно предоставлять доступ к вашим серверам для доступа к данным канала. Серверы получают доступ ко всем каналам.

Для инициализации с секретным ключом:

PNConfiguration pnConfiguration = новая PNConfiguration (); pnConfiguration.setSubscribeKey ( "my_subkey"); pnConfiguration.setPublishKey ( "my_pubkey"); pnConfiguration.setSecretKey ( "my_secretkey"); pnConfiguration.setSecure (истина); PubNub pubnub = новый PubNub (pnConfiguration);

Помните, что инициализация с помощью secretKey необходима только в том случае, если этот экземпляр будет выполнять операции предоставления или отзыва.

Вы можете установить ключ auth по умолчанию во время создания экземпляра, используя атрибут auth:

PNConfiguration pnConfiguration = новая PNConfiguration (); pnConfiguration.setAuthKey ( "my_authkey");

С этого момента все операции PubNub будут отправлять запросы, используя my_authkey для ключа авторизации.

PubNub Access Manager - административная конфигурация

Чтобы потребитель PAM работал правильно, административный орган (обычно сервер) должен сначала выдать соответствующие разрешения для данной комбинации канала PAM / токена авторизации.

Для выполнения этих административных функций вы должны инициализировать, по крайней мере, ваши подписки и секретные ключи:

PNConfiguration pnConfiguration = новая PNConfiguration (); pnConfiguration.setSubscribeKey ( "my_subkey"); pnConfiguration.setPublishKey ( "my_pubkey"); pnConfiguration.setSecretKey ( "my_secretkey"); pnConfiguration.setSecure (истина); PubNub pubnub = новый PubNub (pnConfiguration);

Рабочие уровни PAM

Все операции PAM происходят в:

  • глобальный уровень (без ключа авторизации и не определен канал / группа каналов)
  • уровень канала / группы каналов (определяется только канал / группа каналов)
  • канал / группа каналов и уровень ключа (где определены канал / группа каналов и ключ).

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

pubnub.grant () .write (false) // разрешить запись этих ключей (по умолчанию false) .manage (false) // разрешить этим ключам управлять группами каналов (по умолчанию false) .read (false) // разрешить ключи читать канал подписки (по умолчанию false) .ttl (60) .async (новый PNCallback <PNAccessManagerGrantResult> () {@Override public void onResponse (PNAccessManagerGrantResult result, состояние PNStatus) {// PNAccessManagerGrantResult является проанализированным и удаленным ответом сервера }});

Выше указано, что правило действует в течение 60 минут, и что чтение и запись запрещены на глобальном уровне. У метода revoke () псевдоним метода grant (), но по умолчанию read и write false, поэтому мы можем выполнить ту же самую операцию, используя revoke (), как:

pubnub.grant () .channels (Arrays.asList ("")) // каналы для разрешения предоставления группам .channelGroups (Arrays.asList ("")) // для разрешения предоставления ключей, которые мы предоставляем .write (false) ) // разрешаем этим ключам записывать (по умолчанию false) .manage (false) // разрешаем этим ключам управлять группами каналов (по умолчанию false) .read (false) // разрешаем ключам читать канал подписки (по умолчанию false) ) .async (новый PNCallback <PNAccessManagerGrantResult> () {@Override public void onResponse (результат PNAccessManagerGrantResult, состояние PNStatus) {// PNAccessManagerGrantResult является разобранным и абстрагированным ответом от сервера}});

Далее, мы можем предоставить разрешения только для чтения любому, кто пытается выполнить действия по чтению (подписка, история и т. Д.), Но только на общедоступном канале:

pubnub.grant () .channels (Arrays.asList ("public_chat")) // каналы для разрешения предоставления на .read (true) // разрешаем ключам читать канал подписки (по умолчанию false) .ttl (60) // как долго эти ключи будут оставаться действительными (0 для вечности) .async (новый PNCallback <PNAccessManagerGrantResult> () {@Override public void onResponse (PNAccessManagerGrantResult result, состояние PNStatus) {// PNAccessManagerGrantResult является анализируемым и абстрагированным) ответом сервера}} ;

А для тех, кто имеет аутентификационный токен authenticateduser, они могут как читать, так и писать (публиковать) в публичном чате:

pubnub.grant () .channels (Arrays.asList ("public_chat")) // каналы, позволяющие предоставлять на .authKeys (Arrays.asList ("authenticateduser")) // ключи, которые мы предоставляем .write (true) // разрешить этим ключам записывать (по умолчанию false) .read (true) // разрешить ключам читать канал подписки (по умолчанию false) .ttl (60) // как долго эти ключи будут оставаться действительными (0 для вечности) .async (новый PNCallback <PNAccessManagerGrantResult> () {@Override public void onResponse (результат PNAccessManagerGrantResult, состояние PNStatus) {// PNAccessManagerGrantResult является разобранным и абстрагированным ответом от сервера}});

Если при выполнении операций PAM возникает ошибка, вы можете получить ошибку 403. Если вы это сделаете, убедитесь, что вы установили правильный secretKey, и часы компьютера выдачи синхронизируются с NTP.

Предел общего количества каналов, которые вы можете пропустить за один раз при использовании grant (), составляет 200.

Обработка ошибок в доступе

Как только ваши гранты будут готовы, если во время нормальной работы клиенту будет отказано в доступе к ресурсу из-за проблемы PAM, клиент получит от сервера ответ 403 «Отказано в доступе». Из этого сообщения об ошибке будет объект JSON, описывающий, какой ресурс был отклонен.

Например, при подписке на канал или список каналов, включая канал topSecret, если клиент не авторизован для чтения из topSecret по его текущему токену аутентификации, вы получите этот объект ошибки через обратный вызов ошибки:

{"message": "Forbidden", "payload": {"channel": ["pam"]}}

Это можно легко сделать, выполнив действие по обратному вызову ошибки на основе имени канала, определенного в объекте channel объекта error:

pubnub.addListener (new SubscribeCallback () {@Override public void status (PubNub pubnub, PNStatus status) {if (status.isError ()) {System.out.println (status.getErrorData ());}}}); pubnub.subscribe () .channels (Arrays.asList ("privateChat")) // подписаться на каналы .execute (); Ответ на вызов обрабатывается путем добавления прослушивателя. Пожалуйста, смотрите Раздел слушателей Больше подробностей. Слушатели должны быть добавлены перед вызовом метода.

Использование PAM с группами каналов вместо каналов

При предоставлении или отзыве разрешений на основе групп каналов и каналов используйте метод grant () вместо метода pamGrant.

При работе с группами каналов с PAM имейте в виду следующие важные моменты:

  • разрешения на запись для группы каналов не определены / не реализованы
  • разрешения на чтение для группы каналов полностью отделены от разрешений на чтение для базовых каналов - то есть, если вы запретили чтение на канале CH1, добавили канал CH1 для группы каналов CG1 и предоставили доступ для чтения на канале CG1, запрет на канал CH1 игнорируется. , поскольку вы обращаетесь к нему через группу каналов, которой предоставлено значение true.
  • доступно дополнительное разрешение на управление, которое включает или отключает возможность добавлять / удалять каналы в / из группы каналов.
Предоставить доступ для управления группой каналов

pubnub.grant () .channelGroups (Arrays.asList ("cg1", "cg2", "cg3")) // группы, чтобы разрешить грант для .authKeys (Arrays.asList ("key1", "key2", "key3" )) // ключи, которые мы предоставляем. .write (true) // позволяют этим ключам записывать (по умолчанию false) .manage (true) // позволяют этим ключам управлять группами каналов (по умолчанию false) .read (true) // разрешаем ключам читать канал подписки (по умолчанию false) .ttl (12337) // как долго эти ключи будут оставаться действительными (0 для вечности) .async (новый PNCallback <PNAccessManagerGrantResult> () {@Override public void onResponse ( PNAccessManagerGrantResult result, состояние PNStatus) {// PNAccessManagerGrantResult является разобранным и абстрагированным ответом от сервера}});

Отменить доступ к группе каналов

pubnub.grant () .channelGroups (Arrays.asList ("cg1", "cg2", "cg3")) // группы, чтобы разрешить грант для .authKeys (Arrays.asList ("key1", "key2", "key3" )) // ключи, которые мы предоставляем. .write (false) // позволяют этим ключам записывать (по умолчанию false) .manage (false) // позволяют этим ключам управлять группами каналов (по умолчанию false) .read (false) // разрешаем ключам читать канал подписки (по умолчанию false) .async (новый PNCallback <PNAccessManagerGrantResult> () {@Override public void onResponse (PNAccessManagerGrantResult result, состояние PNStatus) {// PNAccessManagerGrantResult является проанализированным и абстрагированным ответом от сервера} });

Шифрование на уровне сообщений с помощью AES256

Чтобы использовать шифрование AES, вы можете инициализировать с помощью cipherKey по умолчанию:

PNConfiguration pnConfiguration = новая PNConfiguration (); pnConfiguration.setSubscribeKey ( "my_subkey"); pnConfiguration.setPublishKey ( "my_pubkey"); pnConfiguration.setCipherKey ( "my_cipherkey"); pnConfiguration.setSecure (истина); PubNub pubnub = новый PubNub (pnConfiguration);

Любой пользователь cipherKey может прочитать данные, поступающие в ваше приложение и из него, если у них есть к нему доступ. Хотя включение TLS / SSL уменьшает шансы на это, это все же возможно, если кто-то достаточно умен и у него будет достаточно времени. Никогда не позволяйте обнаруживать ваш cipherKey, и обязательно только обменяйте его / доставьте его надежно. В JavaScript это означает, что в явном виде никому не разрешается просматривать исходный код, просматривать сгенерированный исходный код или отладку, чтобы разрешить просмотр вашего cipherKey.

Как только cipherKey установлен на клиенте, все шифрование и дешифрование происходит автоматически для всех методов.

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

Безопасность транспортного уровня с TLS и SSL

Включить TLS / SSL так же просто, как установить для свойства setSecure значение true в вашей PNConfiguration:

PNConfiguration pnConfiguration = новая PNConfiguration (); pnConfiguration.setSubscribeKey ( "my_subkey"); pnConfiguration.setPublishKey ( "my_pubkey"); pnConfiguration.setSecure (истина); PubNub pubnub = новый PubNub (pnConfiguration);

После запуска рекомендуется использовать SSL.

Карта