我想在网络上发布一个 R Shiny Web 应用程序 ( http://www.rstudio.com/shiny/ ),但我想用密码保护它,这样只有拥有凭据的人才能查看我发布的内容。做这个的最好方式是什么 ?
7 回答
这可能有点晚了,但无论如何我都会回答。如果您已经有了解决方案,可以与我们分享吗?
我的主要目标很简单。我的笔记本电脑上有一个闪亮的应用程序的工作版本。我曾经如下所述运行它,一直在本地进行测试。
R -e "shiny::runApp('.')"
然后是我们不得不将它放到 Amazon EC2 实例上的时刻。
起初我的尝试是直接将 apache 代理到我的应用程序将监听的端口 8100。但这并没有那么好,因为以这种方式运行服务器似乎实际上使用了原始套接字,而使用闪亮服务器则回退到使用 sock.js,因此现在通过 HTTP 进行通信。
因此,按照此处的说明在我们的 EC2 实例上下载了闪亮服务器应用程序:https ://github.com/rstudio/shiny-server
顺便说一句,虽然那里的说明建议您在使用 RHEL 实例时从源代码安装 node.js,但通过 yum 安装方式对我来说效果很好。你有这些说明在这里。
在 node.js、shiny-server 安装和设置之后,编辑了我的 Apache conf(Ubuntu 和 RHEL 以不同的方式调用 conf。因此编辑你拥有的那个)。添加了一个虚拟主机来服务我的请求。正如您所注意到的,还使用带有 Apache Location 指令的 Apache Basic digest 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>
除此之外,还编辑了 shiny-server conf 以仅侦听来自 127.0.0.1 的请求(仅限本地主机)。所以在我的闪亮服务器中,我有以下内容:
listen 3838 127.0.0.1;
顺便说一句,如果您在 Amazon EC2 环境中,则不需要此设置,因为您可以使用 EC2 控制面板中的安全组设置来执行相同操作。无论如何,我这样做是一个很好的措施。
现在,这已经足够了,因为我们正在寻找一些非常快速和简单的东西。
现在急切地等待令人敬畏的 RShiny 人员提供身份验证作为企业版交易的一部分。
希望这可以帮助。
这对于 OP 来说可能有点晚了,但它可能对您的用例有用:
https://auth0.com/blog/2015/09/24/adding-authentication-to-shiny-open-source-edition/
它类似于 Rohith 的答案,但它使用 Auth0 代替,它允许您使用更多身份验证选项(如连接、Google 帐户、Active Directory、LDAP 等等)
免责声明:我在 Auth0 工作,我们在内部使用 Shiny 进行此配置,它工作正常。
稍后(2016 年),但我发现了另一个使用ngnix作为代理的选项:
本指南已通过部分遵循本指南完成:https: //support.rstudio.com/hc/en-us/articles/213733868-Running-Shiny-Server-with-a-Proxy
在 Ubuntu 14.04 上:
- 安装 nginx
- 将文件配置 /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:闪亮服务器使用的端口
使用本教程,我向 nginx 服务器添加了密码验证:https ://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04
设置闪亮的进程或闪亮的服务器只听本地主机(127.0.0.1)
目前还没有直接的方法可以做到这一点。不过,我们将在不久的将来发布 Shiny Server 的商业版本。我们将在接下来的一个月左右进行测试,并在年底前发布正式版本。这将包括为您的 Shiny 应用程序进行密码验证的能力。此外,Shiny Server Pro 将具有安全性、身份验证、可扩展性、服务器监控和高级支持等功能。
您可能会得到一些反馈的另一个地方是闪亮的邮件列表。有很多活跃用户可能有一些想法。否则,如果您想就此直接与我们联系,您可以发送电子邮件至 info@rstudio.com,我会回复。
最好的,
乔什
产品经理 - RStudio
答案为时已晚,但我认为,同样有发展。您可以使用 google auth 登录闪亮的网络应用程序。在不同的线程上有一个解决方案,您可以参考:ShinyApp Google Login
我们已经实现了具有多级身份验证的解决方案:
使用基于查询字符串的值来加载应用程序
- 基于时间的加密令牌将在未来的某个时间点到期
- 用户名(在下一个身份验证步骤中使用)
验证访问代码的模式对话框
- 已针对用户名的 AES 加密值进行验证
参考:CRAN - 摘要 -> AES对两个级别使用 CBC 模式,加密密钥(32 字节原始向量)和长 IV