首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Shiny-server与Azure Active Directory协同工作

如何让Shiny-server与Azure Active Directory协同工作
EN

Stack Overflow用户
提问于 2019-06-28 02:42:39
回答 2查看 1.4K关注 0票数 4

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

我使用的是来自dockerhub的rocker/shiny镜像,该镜像很容易构建和运行。但是,当我打开Active Directory时,该应用程序不再工作。任何关于可能出错的提示和线索都将是非常有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2019-10-24 20:32:19

我遇到了同样的“空”页面问题,因为在激活AD身份验证时,浏览器加载静态文件时会返回HTTP400。我在最新版本的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。我通过tcpflow -p -c -i eth0 port 3838检查了服务器端的完整HTTP请求,并查看了底层的R库httpuv,它负责与Shiny服务器的HTTP连接。

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

代码语言:javascript
复制
// Make sure that there's no message body.
  if (pRequest->hasHeader("Content-Length") || pRequest->hasHeader("Transfer-Encoding")) {
    return error_response(pRequest, 400);
  }

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

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

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

快跑吧

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

在您的Dockerfile中

票数 6
EN

Stack Overflow用户

发布于 2021-10-15 11:00:32

创建一个R文件(例如: App.R),您可以按如下方式编写代码

代码语言:javascript
复制
    ##################################
######### Installing libraires #################
load.lib <- c("AzureAuth","shiny","shinyjs","httr")

install.lib <- load.lib[!load.lib %in% installed.packages()]
for(lib in install.lib) install.packages(lib,dependencies=TRUE)
sapply(load.lib,library,character=TRUE)
##############################################
######### Setting the local port ###############
redirect <- "http://localhost:8100"

port <- httr::parse_url(redirect)$port
options(shiny.port=if(is.null(port)) 80 else as.numeric(port))
##################################################
######### Authentication #######################
tenant <- "your-tenant-here"
app <- "your-app-id-here"
resource <- "your-app-id-here"

token <- get_azure_token(resource, tenant, app, auth_type="authorization_code",
                         authorize_args=list(redirect_uri=redirect), version=2,
                         use_cache=FALSE)


###############Importing the app R files#########
# load ui elements
source("ui.R")
# load server function
source("server.R")
#################################################

ui_func <- function(req)
{
  opts <- parseQueryString(req$QUERY_STRING)
  if(is.null(opts$code))
  {
    auth_uri <- build_authorization_uri(resource, tenant, app, redirect_uri=redirect, version=2)
    redir_js <- sprintf("location.replace(\"%s\");", auth_uri)
    tags$script(HTML(redir_js))
  }
  else ui
}

# Run the application
shinyApp(ui = ui_func, server = server)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56797036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档