R Shiny应用程序中的安全性

问题描述 投票:36回答:6

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

r security shiny
6个回答
23
投票

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

我的主要目标很简单。我的笔记本电脑上有闪亮的应用程序的工作版本。我过去一直按下面所述运行它,同时一直在本地进行测试。

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

然后是我们不得不将其放在Amazon EC2实例上的时刻。

起初,我尝试直接将apache代理到我的应用程序将在其上监听的端口8100。但这并不能很好地发挥作用,因为以这种方式运行服务器实际上使用的是原始套接字,而使用闪亮的服务器则回落到使用sock.js,因此通信现在改为通过HTTP。

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

Btw,尽管那里的说明建议您在使用RHEL实例的情况下从源代码安装node.js,但通过使用yum安装方式,它对我来说效果很好。 You have those instructions here.

[在执行node.js之后,安装闪亮的服务器并进行设置,编辑了我的Apache conf(Ubuntu和RHEL调用conf的方式有所不同。因此,请编辑您拥有的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>

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

listen 3838 127.0.0.1;

Btw,如果您在Amazon EC2环境中,则不需要此操作,因为您可以使用EC2仪表板中的安全组设置来执行相同的操作。无论如何,我都是这样做的。

目前,这已经足够了,因为我们一直在寻找非常简单快捷的方法。

现在迫切地等待RShiny团队的好朋友提供auth作为企业版交易的一部分。

希望这会有所帮助。


9
投票

对于OP来说这可能会晚一些[[little,但对您的用例可能有用:

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

与Rohith的答案类似,但是它使用Auth0,它允许您使用更多身份验证选项(例如连接,Google帐户,Active Directory,LDAP等)。>>

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


5
投票
晚一点,但是我发现了另一个使用

ngnix


2
投票
这可以被视为HTTP要求,而不是Shiny功能。如果是这样,您可以考虑首先实施HTTP身份验证,并且在验证凭据之后,可以重定向到Shiny应用程序URL。

1
投票
目前没有直接的方法可以做到这一点。但是,我们将在不久的将来发布商业版Shiny Server。我们将在接下来的一个月左右的时间内进行Beta测试,并在年底之前发布正式版本。这将包括对Shiny Apps进行密码身份验证的功能。此外,Shiny Server Pro将具有围绕安全性,身份验证,可伸缩性,服务器监视和高级支持的功能。

0
投票
答案为时已晚,但我认为,围绕相同的方向发展。您可以使用google auth登录闪亮的Web应用程序。在不同的线程上有一个解决方案,您可以参考:ShinyApp Google Login
© www.soinside.com 2019 - 2024. All rights reserved.