Подтвердить что ты не робот

Безопасность в приложении R Shiny

Я хочу опубликовать веб-приложение R Shiny (http://www.rstudio.com/shiny/) в Интернете, но я хочу, чтобы его защищали паролем, чтобы просматривать только людей с учетными данными что я опубликовал. Каков наилучший способ сделать это?

4b9b3361

Ответ 1

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

Моя основная цель была очень простой. У меня была рабочая версия блестящего приложения на моем ноутбуке. Я использовал его, как указано ниже, все время для тестирования локально.

R -e "shiny::runApp('.')"

Затем настал момент, когда нам пришлось выставить это на экземпляр Amazon EC2.

Сначала моя попытка состояла в том, чтобы напрямую прокси-сервер Apache к порту 8100, на котором мое приложение будет слушать. Но это не сработало так хорошо, как кажется, что запуск сервера таким образом на самом деле использует сырые сокеты, где, когда использование блестящего сервера возвращается к использованию sock.js, следовательно, теперь связь происходит по HTTP.

Итак, загрузите приложение shiny-server на наш экземпляр EC2, выполнив следующие инструкции: https://github.com/rstudio/shiny-server

Btw, хотя инструкции там рекомендуют установить node.js из источника, если вы используете экземпляр RHEL, он работал очень хорошо для меня, перейдя на путь yum install. Здесь есть инструкции.

Следуя node.js, установке и настройке блестящего сервера, отредактировал мой Apache conf (Ubuntu и RHEL вызовет conf по-разному, поэтому отредактируйте тот, который у вас есть). Добавлен виртуальный хост для обслуживания моих запросов. И, как вы заметили, также маскируется с помощью Apache Basic digest Auth с директивой Apache Location.

<VirtualHost *:80>

    ProxyPass / http://localhost:3838/
    ProxyPassReverse / http://localhost:3838/
    ProxyPreserveHost On

    <Location />
        AuthType Basic
        AuthName "Restricted Access - Authenticate"
        AuthUserFile /etc/httpd/htpasswd.users
        Require valid-user
    </Location>

</VirtualHost>

Кроме того, он также редактировал shiny-server conf для прослушивания запроса только с 127.0.0.1 (только для localhost). Итак, на моем блестящем сервере у меня есть следующее:

listen 3838 127.0.0.1;

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

На данный момент этого достаточно, поскольку мы искали что-то очень быстрое и простое.

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

Надеюсь, что это поможет.

Ответ 2

Это может быть немного поздно для OP, но может быть полезно для вашего использования:

https://auth0.com/blog/2015/09/24/adding-authentication-to-shiny-open-source-edition/

Он похож на ответ Rohith, но вместо этого он использует Auth0, что позволяет вам больше параметров аутентификации (например, подключение, учетные записи Google, Active Directory, LDAP и т.д.).

Отказ от ответственности: я работаю в Auth0, мы используем Shiny внутри этой конфигурации, и он отлично работает.

Ответ 3

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

Еще одно место, которое вы могли бы получить, - это Shiny Mailing List. Есть много активных пользователей, которые могут иметь некоторые идеи. В противном случае, если вы хотите напрямую связаться с нами, вы можете отправить по электронной почте [email protected], и я отвечу.

Бест,

Джош

Менеджер продуктов - RStudio

Ответ 4

Это можно рассматривать как требование HTTP, а не функцию Shiny. Если это так, вы можете сначала изучить HTTP-аутентификацию, и как только учетные данные будут проверены, вы можете перенаправить на свой яркий URL-адрес приложения.

Поиск SO или Web для базовой проверки подлинности должен предоставить вам несколько полезных ссылок и приблизиться к вам.

Ответ 5

Немного позже, но я нашел еще один вариант, используя ngnix в качестве прокси:

Это руководство было закончено, частично следуя этому руководству: https://support.rstudio.com/hc/en-us/articles/213733868-Running-Shiny-Server-with-a-Proxy

На Ubuntu 14.04:

  • Установить nginx
  • Измените файл config/etc/nginx/nginx.conf на:

Это:

events {
        worker_connections 768;
        multi_accept on;
}

http {

  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }

  server {
    listen XX;



    location / {
      proxy_pass http://localhost:YY;
      proxy_redirect http://localhost:YY/ $scheme://$host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;

      auth_basic "Restricted Content";
      auth_basic_user_file /etc/nginx/.htpasswd;
    }
  }
}

XX: порт, который nginx будет слушать

YY: порт, который использует блестящий сервер

  1. Используя этот учебник, я добавил аутентификацию пароля на сервер nginx: https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04

  2. Настройте блестящий процесс или блестящий сервер, чтобы слушать только localhost (127.0.0.1)