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)