R闪亮应用程序中的安全性

Nic*_*ton 35 security r shiny

我想在网上发布一个R Shiny Web应用程序(http://www.rstudio.com/shiny/),但我想用密码保护它,以便只有拥有凭据的人才能查看我发布的内容.做这个的最好方式是什么 ?

shi*_*gav 23

这可能有点晚了,但无论如何我都会回答.如果您已经有解决方案,请与我们分享一下吗?

我的主要目标非常简单.我的笔记本电脑上有一个闪亮的应用程序的工作版本.我曾经如下所述运行它,一直在本地进行测试.

R -e "shiny::runApp('.')"
Run Code Online (Sandbox Code Playgroud)

然后是我们不得不在Amazon EC2实例上进行此操作的那一刻.

起初我的尝试是直接将apache代理到我的应用程序可以收听的端口8100.但这并没有那么好用,因为看起来以这种方式运行服务器实际上使用原始套接字,因为使用闪亮服务器回退到使用sock.js因此现在通过HTTP进行通信.

所以按照以下说明在我们的EC2实例上下载了闪亮的服务器应用程序:https://github.com/rstudio/shiny-server

顺便说一句,虽然那里的说明建议你从源代码安装node.js,如果你使用的是RHEL实例,那么通过yum install方式它对我来说非常好.你有这些说明.

在node.js,shiny-server安装和设置之后,编辑了我的Apache conf(Ubuntu和RHEL以不同方式调用conf.因此编辑你拥有的那个).添加了虚拟主机来为我的请求提供服务.正如您所注意到的,还使用Apache Location指令使用Apache Basic摘要Auth对其进行了屏蔽.

<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>
Run Code Online (Sandbox Code Playgroud)

除此之外,还编辑了闪亮的服务器conf,仅侦听来自127.0.0.1的请求(仅限localhost).所以在我的闪亮服务器中,我有以下内容:

listen 3838 127.0.0.1;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您在Amazon EC2环境中,则不需要这样,因为您可以使用EC2仪表板中的安全组设置来执行相同操作.无论如何,我这样做是一个很好的衡量标准.

现在,这已足够,因为我们正在寻找非常快速和简单的东西.

现在拼命地等待着令人敬畏的RShiny人员提供auth作为企业版交易的一部分.

希望这可以帮助.


小智 9

对于OP来说这可能有点晚,但它可能对您的用例有用:

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

它与Rohith的答案类似,但它使用的是Auth0,它允许您提供更多身份验证选项(如连接,Google帐户,Active目录,LDAP和大型等)

免责声明:我在Auth0工作,我们在内部使用Shiny这种配置,它工作正常.


Ser*_*dez 5

稍后(2016 年),但我找到了另一个使用ngnix作为代理的选项:

本指南已部分遵循本指南完成:https : //support.rstudio.com/hc/en-us/articles/213733868-Running-Shiny-Server-with-a-Proxy

在 Ubuntu 14.04 上:

  1. 安装 nginx
  2. 将文件配置 /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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

XX: nginx 监听的端口

YY:闪亮服务器使用的端口

  1. 使用本教程,我为nginx服务器添加了密码认证:https : //www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04

  2. 设置闪亮的进程或闪亮的服务器只听本地主机(127.0.0.1)


小智 1

目前还没有直接的方法来做到这一点。不过,我们将在不久的将来发布 Shiny Server 的商业版本。我们将在接下来的一个月左右进行测试,并在年底前发布正式版本。这将包括为您的闪亮应用程序进行密码身份验证的能力。此外,Shiny Server Pro 将具有安全性、身份验证、可扩展性、服务器监控和高级支持等功能。

您可能可以获得一些反馈的另一个地方是闪亮的邮件列表。有很多活跃用户可能有一些想法。否则,如果您想就此事直接联系我们,可以发送电子邮件至 info@rstudio.com,我会回复。

最好的,

乔什

产品经理 - RStudio