R Shiny - R Shiny 服务器开源的 WebSEAL 身份验证

R Shiny - WebSEAL authentication for R Shiny Server Open Source

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

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

我们希望向经过身份验证的用户公开 Shinyapp,其内容取决于用户组成员身份。 WebSEAL 能够在 HTTP Headers 中设置 iv_useriv_group 变量以通过联结传递到 shinyapp,但开源 Shiny Server 似乎无法访问它们(即通过 session$clientData object).

我想知道是否有人想出一种方法让开源 Shiny Server 应用程序访问 HTTP Headers 以确定用户和组。

如果您只想访问 HTTP headers,UI 可以是一个函数,它接受实现 Rook specification 的请求 object 的单个参数.

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 header 提供不同页面的一种方法可能是这样的 -

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)