Skip to content

developcreativo/fastapi_google_auth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Ejemplo de Integración de Google Auth en FastAPI

Este ejemplo muestra cómo integrar autenticación con Google en FastAPI y cómo controlar el acceso a diferentes endpoints.

Características

  • ✅ Autenticación con Google OAuth2
  • ✅ Verificación de tokens de Google
  • ✅ Endpoints públicos (sin autenticación)
  • ✅ Endpoints protegidos (requieren autenticación)
  • ✅ Endpoints con autenticación opcional
  • ✅ Control de acceso basado en roles (ejemplo de admin)

Instalación

  1. Instalar las dependencias:
pip install -r requirements.txt
  1. Configurar variables de entorno:

Crear un archivo .env o exportar las variables:

export GOOGLE_CLIENT_ID="tu-client-id.apps.googleusercontent.com"

Configuración de Google OAuth

  1. Ve a Google Cloud Console
  2. Crea un nuevo proyecto o selecciona uno existente
  3. Habilita la API de Google+ o Google Identity
  4. Ve a "Credenciales" y crea un ID de cliente OAuth 2.0
  5. Configura los URI de redirección autorizados:
    • http://localhost:8000 (desarrollo)
    • Tu dominio de producción

Uso

Iniciar el servidor

python main.py

O usando uvicorn directamente:

uvicorn main:app --reload

Endpoints disponibles

1. Endpoint público

GET /

No requiere autenticación.

2. Autenticación con Google

POST /auth/google
Body: { "token": "token-de-google-id" }

3. Endpoint protegido

GET /protected
Headers: Authorization: Bearer <token>

Requiere autenticación.

4. Información del usuario

GET /user/me
Headers: Authorization: Bearer <token>

Retorna información del usuario autenticado.

5. Endpoint con autenticación opcional

GET /optional
Headers: Authorization: Bearer <token> (opcional)

Funciona con o sin autenticación.

6. Endpoint de administrador

GET /admin
Headers: Authorization: Bearer <token>

Requiere autenticación Y rol de administrador.

Flujo de Autenticación

  1. Frontend: El usuario inicia sesión con Google usando la biblioteca de Google Sign-In
  2. Frontend: Obtiene el token de ID de Google
  3. Frontend: Envía el token al endpoint /auth/google
  4. Backend: Verifica el token con Google
  5. Backend: (Opcional) Genera un JWT propio para futuras peticiones
  6. Frontend: Usa el token en las peticiones siguientes como Authorization: Bearer <token>

Ejemplo de uso desde el frontend

JavaScript (con Google Sign-In)

// Cargar la biblioteca de Google Sign-In
<script src="https://accounts.google.com/gsi/client" async defer></script>

// Inicializar Google Sign-In
google.accounts.id.initialize({
  client_id: 'TU_GOOGLE_CLIENT_ID',
  callback: handleCredentialResponse
});

// Función callback
async function handleCredentialResponse(response) {
  const token = response.credential;
  
  // Enviar token al backend
  const result = await fetch('http://localhost:8000/auth/google', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ token: token })
  });
  
  const data = await result.json();
  console.log('Usuario autenticado:', data.user);
  
  // Guardar token para futuras peticiones
  localStorage.setItem('access_token', data.access_token);
}

// Llamar a endpoint protegido
async function callProtectedEndpoint() {
  const token = localStorage.getItem('access_token');
  
  const response = await fetch('http://localhost:8000/protected', {
    headers: {
      'Authorization': `Bearer ${token}`
    }
  });
  
  const data = await response.json();
  console.log(data);
}

Mejoras recomendadas para producción

  1. Generar JWT propio: No usar el token de Google directamente, generar tu propio JWT después de validar
  2. Base de datos: Guardar usuarios y permisos en una base de datos
  3. Refresh tokens: Implementar renovación de tokens
  4. Rate limiting: Limitar intentos de autenticación
  5. Logging: Registrar intentos de acceso y errores
  6. CORS: Configurar CORS apropiadamente
  7. HTTPS: Usar siempre HTTPS en producción
  8. Validación adicional: Verificar dominio del email, estado del usuario, etc.

Estructura del proyecto

fastapi_google_auth_example/
├── main.py              # Aplicación FastAPI principal
├── requirements.txt     # Dependencias Python
├── .gitignore          # Archivos ignorados por Git
└── README.md           # Este archivo

Seguridad

  • ✅ Los tokens se verifican con Google antes de usar
  • ✅ Se valida que el token pertenece al cliente correcto
  • ✅ Los endpoints protegidos requieren autenticación válida
  • ⚠️ En producción, implementa JWT propio y no uses el token de Google directamente
  • ⚠️ Configura CORS apropiadamente
  • ⚠️ Usa HTTPS en producción

Licencia

Este ejemplo es de código abierto y está disponible para uso educativo y de desarrollo.

Contribuir

Las contribuciones son bienvenidas. Por favor, abre un issue o pull request si tienes sugerencias o mejoras.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages