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