如何让 Shiny-server 使用 Azure Active Directory

Kas*_*sen 4 r shiny shiny-server azure-active-directory azure-webapps

我正在使用 Azure Webapps for Containers 来托管 R Shiny-Server。我想使用 Azure Active Directory 对登录应用程序的用户进行身份验证和授权。

我正在使用rocker/shiny来自 dockerhub的图像,并且图像可以轻松构建和运行。但是,当我打开 Active Directory 时,该应用程序不再工作。任何关于可能出错的提示和线索都会有很大帮助。

在职的

不工作

lha*_*amp 6

我遇到了同样的“空”页面问题,因为浏览器加载静态文件在激活 AD 身份验证时返回 HTTP 400。我在最新版本的 Shiny 服务器 (v1.5.12.933) 和 Shiny (1.4.0) 上的 Azure 应用服务上的 docker 容器中有一个 Shiny 应用程序。

这意味着这里描述的问题https://community.rstudio.com/t/shiny-v1-3-known-regressions-and-serious-issues/28180/4我首先怀疑不是原因。

没有 AD 身份验证,页面显示正确。负责 AD 身份验证的 Azure 代理会注入一些 HTTP 标头和 cookie。我检查了服务器端的完整 HTTP 请求,tcpflow -p -c -i eth0 port 3838并查看了httpuv负责与 Shiny 服务器的 HTTP 连接的底层 R 库。

在搜索该库中返回 HTTP 400 代码的位置时,我发现了 https://github.com/rstudio/httpuv/blob/master/src/webapplication.cpp 和以下代码片段

// Make sure that there's no message body.
  if (pRequest->hasHeader("Content-Length") || pRequest->hasHeader("Transfer-Encoding")) {
    return error_response(pRequest, 400);
  }
Run Code Online (Sandbox Code Playgroud)

而到达服务器的请求具有Content-Length: 0如果关闭 AD 身份验证则不存在的标头。

我创建了一个修复程序和 PR httpuv,请参阅问题https://github.com/rstudio/httpuv/issues/247

只要它没有合并到他们的仓库中,你就可以使用它。

赶紧跑

R -e 'library(devtools); install_github("LHaferkamp/httpuv")'

在你的 Dockerfile 中