R应用程序中的安全性

R应用程序中的安全性,r,security,shiny,R,Security,Shiny,我想在web上发布R Shining web应用程序(),但我想对其进行密码保护,以便只有具有凭据的人才能查看我发布的内容。做这件事最好的方法是什么?目前还没有一种直接的方法。然而,我们将在不久的将来发布一个商业版的闪亮服务器。我们将在接下来的一个月左右进行测试,并在年底前正式发布。这将包括为您的闪亮应用程序进行密码验证的功能。此外,Shinny Server Pro将具有安全性、身份验证、可扩展性、服务器监控和高级支持等功能 另一个你可以得到一些反馈的地方是。有很多活跃的用户可能有一些想法。否

我想在web上发布R Shining web应用程序(),但我想对其进行密码保护,以便只有具有凭据的人才能查看我发布的内容。做这件事最好的方法是什么?

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

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

最好的

乔希


产品经理-RStudio

这可以被视为
HTTP
要求,而不是
闪亮的
功能。如果是这样的话,您可以考虑首先实现HTTP身份验证,一旦验证了凭据,就可以重定向到您的应用程序URL

  • 这是给ApacheTomcat的

  • 另外,请查看在IIS中的设置


在SO或Web上搜索基本身份验证将为您提供一些有用的链接,并让您离得更近。

这可能有点晚了,但我还是要回答。如果您已经有了解决方案,请与我们分享好吗

我的主要目标很简单。我的笔记本电脑上有一个运行版本的闪亮应用程序。我曾经像下面提到的那样运行它,同时在本地进行测试

R -e "shiny::runApp('.')"
然后,我们不得不在AmazonEC2实例上实现这一点

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

因此,按照以下说明在我们的EC2实例上下载了Shining server应用程序:

顺便说一句,尽管那里的说明建议您在使用RHEL实例的情况下从源代码处安装node.js,但通过使用yum安装方式,它对我来说效果非常好

在node.js之后,Shining server installation&setup编辑了我的Apache配置文件(Ubuntu和RHEL对配置文件的调用不同,因此编辑您的配置文件)。添加了一个虚拟主机来服务我的请求。正如您所注意到的,还使用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>
顺便说一句,如果您在AmazonEC2环境中,您就不需要这个,因为您可以使用EC2仪表板中的安全组设置来执行相同的操作。无论如何,我这样做是一个很好的措施

现在,这就足够了,因为我们正在寻找一些非常快速和简单的东西

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

希望这能有所帮助。

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

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

免责声明:我在Auth0工作,我们在内部使用Shiny进行此配置,效果很好。

稍晚一点(2016年),但我发现另一个选项使用ngnix作为代理:

本指南通过部分遵循本指南完成:

在Ubuntu 14.04上:

  • 安装nginx
  • 将文件config/etc/nginx/nginx.conf更改为:
  • 这:

    XX:nginx将侦听的端口

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

  • 使用本教程,我向nginx服务器添加了密码验证:

  • 将闪亮进程或闪亮服务器设置为仅侦听localhost(127.0.0.1)


  • 现在回答这个问题已经太迟了,但我认为,同样也有发展。您可以使用google auth登录闪亮的web应用程序。在不同的线程上有一个解决方案,您可以参考:

    谢谢Josh,我会直接给您发电子邮件。干杯,你好,乔希。我不太明白。它是RStudio服务器上的商业帐户,还是闪亮服务器软件的商业版本?其实并不是那么简单。闪亮的应用程序运行在它们自己的应用服务器(闪亮服务器)上,所以它不像在现有的httpd.conf中缓慢地运行几行那么简单。。。上面的答案涵盖了细节:-)我Rohith,我试过这个,但当shiny试图打开websocket时,我得到了401秒。浏览器是否正确传递/websocket的身份验证凭据?有没有另一个模块可以让它正常工作?好吧,这里的想法是Shining完全与身份验证逻辑断开连接。在这里,我们完全依赖Apache提供的基本摘要身份验证,并在Apache确认身份验证后,让Apache简单地重定向到Shining应用程序。所以所有的Shiny&WebSocket都只是隐藏在这个Apache层后面。因此,如果有一个特定于闪亮的错误,我建议您查找您的闪亮conf(我认为它位于Ubuntu上的/etc/shinny-server/shinny-server.conf中),并进行闪亮相关的调试,而不是查看Apache。谢谢。这是一个相当简单的解决方案。您好,我正在尝试遵循此方法,但无法显示身份验证。有什么建议吗?您是否仍然需要亚马逊允许的TCP 3838?如果我删除它,那么什么都不会发生——它只是旋转。如果你没有让apache auth弹出窗口显示出来,那么这会是apache的配置问题,而不是RShiny与apache的管道问题吗?现在有一个开源的替代方案来部署闪亮的应用程序:它似乎是
    listen 3838 127.0.0.1;
    
    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;
        }
      }
    }