R Shiny - аутентификация WebSEAL для R Shiny Server с открытым исходным кодом

Насколько я понимаю, версия Shiny Server с открытым исходным кодом не поддерживает аутентификацию.

У нас есть среда, которая использует прокси-сервис WebSEAL для аутентификации пользователей и направления их доступа через веб-приложения.

Мы хотим предоставить Shinyapp аутентифицированным пользователям, содержание которых зависит от членства в группах пользователей. WebSEAL может установить iv_user а также iv_group переменные в заголовках HTTP для передачи на shinyapp через соединение, но сервер Shiny с открытым исходным кодом, кажется, не может получить к ним доступ (т.е. через объект сеанса $clientData).

Мне интересно, разработал ли кто-нибудь способ для приложения с открытым исходным кодом Shiny Server получить доступ к заголовкам HTTP, чтобы определить пользователя и группы.

1 ответ

Решение

Если вы просто хотите получить доступ к заголовкам HTTP, пользовательский интерфейс может быть функцией, которая принимает один аргумент для объекта запроса, который реализует спецификацию 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)
Другие вопросы по тегам