Oauth2.0 flow for a flexdashboard shiny app

Viewed 928

We’re trying to implement OAuth2.0 into a Shiny app using Flex Dashboard. The OAuth flow is currently executing, I can login and see the code and state variables in the URL. When the OAuth server redirects to my app, it gets stuck on the grey flexdashboard loading screen.

In addition to examining if we are doing this correctly, should the app also have a redirect URL for OAuth, where the token is processed? If so, how would we configure that?

We were basically following the instructions here. Below is the rmarkdown content for the process.


    ---
    title: "Question"
    output: 
      flexdashboard::flex_dashboard:
        orientation: rows
        vertical_layout: fill
    fontsize: 12
    runtime: shiny
    ---

    ```{r oauth1}    
    options(shiny.host = '0.0.0.0', shiny.port = 8100, shiny.trace = TRUE)  

    APP_URL <- "https://localhost:8100/"

    if (interactive()) {
       # testing url
       cat(file=stderr(), "starting in interactive mode!")
       APP_URL <- "http://localhost:8100/"
     } else {
       # deployed URL
       cat(file=stderr(), "starting in non-interactive mode!")
       APP_URL <- example_url
    }

    app <- oauth_app("Accounts",
                     key = KEY,# Add key value here
                     secret = SECRET,# Add secret value here
                     redirect_uri = APP_URL
    )

    api <- oauth_endpoint(
      authorize = "https://example_url/oauth/authorize",
      access = "https://example_url/oauth/token"
    )

    scope <- ""

    has_auth_code <- function(params) {
      urlParams = parseQueryString(isolate(session$clientData$url_search))
      browser()
      }

    ```

    ```{r oauth2}
    # Manually create a token
    token <- oauth2.0_token(
        app = app,
        endpoint = api,
        cache = FALSE)
    )
    save(token, file="ox_oauth")

    params <- parseQueryString(isolate(session$clientData$url_search))

    resp <-GET("https://example_url_1/api/user", config(token = token))
    #stop_for_status(resp)

    cat(file=stderr(), "Looking for response")
    cat(file=stderr(), resp)
    ```

    ```{r ui}
    uiFunc <- function(req) {
      cat(file=stderr(), "starting UI function")
      if (!has_auth_code(parseQueryString(req$QUERY_STRING))) {
        url <- oauth2.0_authorize_url(api, app, scope = scope)
        cat(file=stderr(), url)
        redirect <- sprintf("location.replace(\"%s\");", url)
        tags$script(HTML(redirect))
      } else {
        ui
      }
    }
    ```

    ```
    Page 1
    =====================================================================
    row {data-width=800 data-height=100 .tabset .tabset-fade}
    -----------------------------------------------------------------------

    ### Section 1

    ```{r pg1sec1}
    selectizeInput(
        "A_Type",
        label = "Assignment type",
        choices = c("HW", "R"),
        multiple = TRUE,
        # selectize = TRUE,
        options = list(placeholder = "Select assignment type(s)"),
        width = '98%',
        selected = ""
    )
    ```

    ```{r og1sec1.1}
    observeEvent(input$A_Type, {
        x <- input$A_Type
        updateSelectizeInput(session, "A_Type2",
                            selected = x)
    })
    ```
    ```
    Page 2
    =====================================================================
    row {data-width=800 data-height=100 .tabset .tabset-fade}
    -----------------------------------------------------------------------

    ### Section 1

    ```{r pg2sec1}
    selectizeInput(
        "A_Type2",
        label = "Assignment type",
        choices = c("HW", "R"),
        multiple = TRUE,
        width = '98%'
    )
    ```

We got the following output in the rmarkdown window:

    Waiting for authentication in browser...
    Press Esc/Ctrl + C to abort
    Please point your browser to the following url: 
        https://example_url/oauth/authorize?client_id=KEY&redirect_uri=XXX%2F&response_type=code&state=XXX

We expected it to open the flexdashboard in the browser window, and it just got stuck on the loading page.

0 Answers
Related