3

据我了解,Shiny Server 的开源版本不支持身份验证。

我们有一个环境,它使用 WebSEAL 代理服务来认证用户并将他们的访问权引导到 Web 应用程序。

我们希望向经过身份验证的用户公开一个 Shinyapp,其提供的内容取决于用户组成员身份。WebSEAL 能够设置 HTTP 标头中的iv_useriv_group变量以通过联结传递到 shinyapp,但开源 Shiny 服务器似乎无法访问它们(IE 通过 session$clientData 对象)。

我想知道是否有人为开源 Shiny Server 应用程序找到了访问 HTTP 标头以确定用户和组的方法。

4

1 回答 1

2

如果您只想访问 HTTP 标头,则 UI 可以是一个函数,它接受实现Rook 规范的请求对象的单个参数。

library(shiny)

ui <- function(request) {
  print(as.list(request))
  # get HTTP headers like request$HTTP_HEADER_NAME (all caps)

  fluidPage(
    tags$pre(
      paste(capture.output(as.list(request)), collapse = "\n")
    )
  )
}

server <- function(input, output) {
}

shinyApp(ui, server)

根据 HTTP 标头提供不同页面的一种方法可能是这样的 -

unauthorizedPage <- function() {
  "Unauthorized"
}

memberPage <- function() {
  fluidPage(
    "Member page"
  )
}

ui <- function(request) {
  # serve memberPage() if request contains header `iv_group: member`
  # otherwise serve unauthorizedPage()
  if (!identical(request$HTTP_IV_GROUP, "member"))
    return(unauthorizedPage())

  memberPage()
}

server <- function(input, output) {
}

shinyApp(ui, server)
于 2018-02-16T06:37:46.737 回答