Den*_*tes 10 authentication r shiny shiny-server amazon-cognito
我正在将R Studio Server与R Shiny结合使用,在Ubuntu 16.04上运行.一切正常.我想要保护R Shiny仪表板(用户名+ pw),我正在考虑建立一个与AWS Cognito通信的小网页来验证用户.
我找不到任何关于这种组合的文档(Shiny + Cognito),但确实找到了一些关于R Shiny Authentication(使用NGINX + Auth0)和Cognito(例如与NodeJS结合使用)的文档.
Shiny和Cognito(例如PHP或Node JS)的组合是逻辑和安全的吗?什么是最好的方法:一个简单的网页与一些PHP,或一个Node JS应用程序,其中包含Shiny?
我意识到这个问题相当广泛,但是因为我确信我不是唯一一个在这个问题上走来走去的人,所以我仍然要求所有人都能从可能的解决方案中获益.
这是我实施的设置的描述。这是使用 AWS Cognito 以及 AWS 特定的功能。
上下文:我有一堆光泽的应用程序,包装在容器中(通常使用asachet/shiny-base
或一种这些Dockerfile
小号作为基础)。我想私下托管它们并控制谁可以访问它们。
下面的设置是闪亮代理的替代方案。事实上,它不需要任何闪亮的服务器。每个应用程序只依赖于shiny
. 每个容器都公开一个端口(例如EXPOSE 3838
),并简单地使用runApp(".", host="0.0.0.0", port=3838)
. 扩展策略负责根据需要启动和停止容器。身份验证逻辑与应用程序代码完全分离。
我的云设置是:
app1.example.com
转发到app1
、app2.example.com
到app2
等。这都是在 ALB 规则中设置的。这是我们可以轻松添加身份验证的地方。我有一个 Cognito“用户池”,用户帐户允许访问应用程序。这可用于在流量级别而不是应用程序级别限制对应用程序的访问。
为此,您首先需要在 Cognito 用户池中创建一个客户端应用程序。对于app1
,我将使用具有openid
范围和app1.example.com/oauth2/idpresponse
作为回调 URL的“授权代码授予”流创建 Cognito 客户端应用程序。
完成此操作后,您只需进入 ALB 规则并添加身份验证作为转发的先决条件:
从现在开始,流量app1.example.com
必须经过身份验证才能转发到app1
。未经身份验证的请求将被重定向到 Cognito 托管 UI(类似于example.auth.eu-west-2.amazoncognito.com
)以输入其凭据。您可以在 Cognito 设置中自定义托管 UI 的外观。
在容器中打包 R 代码:
使用 ALB 设置 Cognito 身份验证: