Propósito
Configurar el gate de autenticación de manual.brandacare.com para que solo
usuarios con cuenta Google de @brandacare.com puedan acceder. Sin costo recurrente,
sin migrar DNS, sin Netlify Pro.
Tiempo: 30 min total ·
Quién: Yami o IT (Quasar/Santi/Manuel)
Limitación importante
Este es un gate client-side.
Disuade acceso casual/público pero NO es seguridad criptográfica:
- Alguien con conocimiento técnico puede ver source con curl/wget (el HTML está hosteado público)
- JavaScript desactivado en el browser = sin gate
- NO contiene PHI (eso vive en Google Apps Script / Workspace — ver TRN-IT-001)
Pasos
1Crear proyecto en Google Cloud Console
- Andá a console.cloud.google.com
- Click en el selector de proyectos arriba → New Project
- Nombre:
BrandaCare Manual Auth - Organization:
brandacare.com(debería aparecer si tu Workspace está bien) - Create
2Habilitar Google Identity Services
- Sidebar → APIs & Services → Enabled APIs & services
- No hace falta habilitar nada extra para OAuth básico — Google Identity está por default
3Configurar OAuth consent screen
- Sidebar → APIs & Services → OAuth consent screen
- User Type: Internal (solo usuarios de @brandacare.com)
- Create
- App information:
- App name:
BrandaCare Manual - User support email:
hello@brandacare.com - App logo: subir logo BrandaCare (opcional)
- App name:
- App domain → Application home page:
https://manual.brandacare.com - Authorized domains:
brandacare.com - Developer contact:
hello@brandacare.com - Save and Continue → Scopes: dejar default → Save and Continue → Summary → Back to Dashboard
4Crear Credentials (Client ID)
- Sidebar → APIs & Services → Credentials
- Click + Create Credentials → OAuth client ID
- Application type: Web application
- Name:
BrandaCare Manual Web Client - Authorized JavaScript origins → + Add URI:
https://manual.brandacare.com
- Authorized redirect URIs → no hace falta agregar (usamos popup mode)
- Create
- COPIAR el Client ID que te muestra (es algo tipo
123456789-abcdef.apps.googleusercontent.com)
5Pegar el Client ID en auth.js
En tu repo local del manual, abrí docs/brand/auth.js:
const CLIENT_ID = 'REPLACE_WITH_YOUR_GOOGLE_OAUTH_CLIENT_ID.apps.googleusercontent.com';
Reemplazá esa línea con tu Client ID real:
const CLIENT_ID = '123456789-abcdef.apps.googleusercontent.com';
6Inyectar el auth gate en todos los HTMLs
cd "api open dental stedi claims" python docs/inject_auth.py
Output esperado:
🔒 Inyectando auth gate en N archivos... ✅ N archivos modificados (0 ya tenían auth gate)
Esto agrega <script src="brand/auth.js"> al <head> de cada HTML. Idempotente — si lo corrés 2 veces no duplica.
7Re-deploy a Netlify
Drag-and-drop la carpeta docs/ a Netlify, o si tenés CI desde Git, push y deploy automático.
8Verificar
- Abrí
manual.brandacare.comen pestaña incógnita - Debería aparecer la pantalla de login branded BrandaCare
- Click "Continue with Google" → loggear con cuenta @brandacare.com → debería entrar
- Probar con cuenta Gmail personal (NO @brandacare.com) → debería rechazar con mensaje claro
Troubleshooting
| Error | Causa | Fix |
|---|---|---|
| "Auth gate no configurado" banner naranja | El Client ID no se reemplazó en auth.js | Editar brand/auth.js línea 15 |
| "Error 400: redirect_uri_mismatch" | El URI no está en Authorized JS origins | Agregar https://manual.brandacare.com en Google Console → Credentials → tu Client ID |
| "This app isn't verified" | OAuth consent screen User Type es External | Cambiar a Internal en Google Console |
| Login funciona pero te rechaza tu @brandacare.com | El campo ALLOWED_DOMAIN está mal | Verificar en auth.js línea 16: debe ser 'brandacare.com' (sin @) |
| Cambios en HTML no aparecen tras editar | Cache del browser | Cmd+Shift+R o incógnito |
Mantenimiento
| Cuándo | Qué hacer |
|---|---|
| Nuevo SOP/training agregado al manual | Re-correr python docs/inject_auth.py → re-deploy |
| Cambio de Client ID | Editar brand/auth.js → re-deploy |
| Sospecha de compromiso | Google Cloud → Credentials → regenerar Client Secret (no aplica con OAuth ID, pero podés revocar tokens) |
| Sesiones duran mucho | Cambiar SESSION_HOURS en auth.js (default: 8h) |
