---
title: "(Español) Asegurando Shiny con Google Auth"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{(Español) Asegurando Shiny con Google Auth}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

## Introducción

Esta viñeta proporciona un tutorial paso a paso sobre cómo asegurar una aplicación Shiny utilizando la autenticación de Google a través del paquete R tapLock. tapLock simplifica la integración de OpenID Connect y OAuth 2.0 en aplicaciones Shiny, asegurando una robusta seguridad con un esfuerzo mínimo de codificación.

## Prerrequisitos

Antes de proceder, asegúrate de tener lo siguiente:
- Un conocimiento básico de R y Shiny.
- Una aplicación Shiny lista para ser desplegada.
- Acceso a Google Developer Console para las credenciales OAuth.
- (Opcional) Un servidor con HTTPS habilitado.

## Paso 1: Instalar tapLock

Instala tapLock desde GitHub usando el paquete `pak`:

```r
install.packages("tapLock")
```

## Paso 2: Crear Credenciales OAuth de Google

1. Ve a [Google Developer Console](https://console.developers.google.com/).
2. Crea un nuevo proyecto o selecciona uno existente.
3. Navega a 'Credenciales' y crea credenciales 'OAuth client ID'.
4. Establece los **`Authorized JavaScript origins`** en la URL de tu aplicación Shiny.
5. Establece los **`Authorized redirect URIs`** en la URL de tu aplicación Shiny con
   el sufijo `/login`.
6. Anota el `client_id` y el `client_secret`.

## Paso 3: Configurar Autenticación en R

Carga tapLock y configura la autenticación:

```r
library(taplock)

auth_config <- new_openid_config(
  provider = "google",
  client_id = Sys.getenv("GOOGLE_CLIENT_ID"),
  client_secret = Sys.getenv("GOOGLE_CLIENT_SECRET"),
  app_url = Sys.getenv("SHINY_APP_URL")
)
```

Reemplaza `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, y `SHINY_APP_URL` con tus credenciales reales y la URL de tu aplicación en tus variables de entorno.

## Paso 4: Modificar Aplicación Shiny

Modifica tu aplicación Shiny para usar `sso_shiny_app`:

```r
library(shiny)
library(tapLock)

# Configuración de autenticación
auth_config <- new_openid_config(
  provider = "google",
  client_id = Sys.getenv("GOOGLE_CLIENT_ID"),
  client_secret = Sys.getenv("GOOGLE_CLIENT_SECRET"),
  app_url = Sys.getenv("SHINY_APP_URL")
)

# UI
ui <- fluidPage(
  tags$h1("Bienvenido a la Aplicación Shiny Segura"),
  textOutput("userInfo")
)

# Server
server <- function(input, output, session) {
  output$userInfo <- renderText({
    user_email <- get_token_field(token(), "email")
    glue::glue("Conectado como: {user_email}")
  })
}

# Asegurar aplicación Shiny con tapLock
sso_shiny_app(auth_config, ui, server)
```

## Paso 5: Desplegar la Aplicación

Despliega tu aplicación Shiny como lo harías normalmente. El paquete tapLock maneja el proceso de autenticación.
Recomendamos desplegar tu aplicación con una solución como Shiny Server
(Open Source o Pro) o con [faucet](https://github.com/ixpantia/faucet).
Soluciones como Posit Connect ya incluyen autenticación y no requieren
tapLock.

## Conclusión

Siguiendo estos pasos, has asegurado con éxito tu aplicación Shiny con autenticación de Google utilizando tapLock. Esto asegura que solo los usuarios autenticados puedan acceder a tu aplicación, mejorando su seguridad y privacidad.
