Implementación de Autenticación de Dos Factores en Flutter para Github

La autenticación de dos factores (2FA) proporciona una capa adicional de seguridad al requerir una verificación secundaria durante el inicio de sesión. Un método común es el uso de contraseñas de un solo uso (OTP), que son códigos temporales generados para confirmar la identidad del usuario. Estos códigos tienen una validez corta, usualmente de 30 a 60 segundos, y se generan mediante algoritmos estandarizados como TOTP (Time-based One-Time Password).

Las aplicaciones típicas del OTP incluyen:

  • Refuerzo de la seguridad de cuentas: Actúa como segundo factor, reduciendo el riesgo de acceso no autorizado incluso si la contraseña se compromete.
  • Autenticación en dos pasos: Se utiliza después de la verificación de usuario y contraseña, generándose a través de aplicaciones móviles, SMS o tokens físicos.
  • Confirmación de transacciones: Valida operaciones sensibles, como transferencias bancarias, asegurando que las realice el titular legítimo.
  • Control de acceso: Limita el ingreso a servicios específicos, como redes corporativas, mediante OTP temporal.

Obtención de la Clave Secreta para 2FA en Github

Para integrar 2FA en Github con una aplicación Flutter, primero se debe obtener la clave secreta. Sigue estos pasos en la interfaz de Github:

  1. Accede a la configuración de seguridad de tu cuenta de Github y activa la autenticación de dos factores.
  2. En lugar de escanear el código QR, selecciona la opción para configurar manualmente la clave. Esto mostrará una cadena alfanumérica, que es la clave secreta para generar OTP.
  3. Copia esta clave; se usará en la aplicación Flutter para generar códigos dinámicos.

Desarrollo de la Aplicación Flutter

Preparación del Entorno

Asegúrate de tener instalado Flutter SDK, Android Studio o Visual Studio Code con extensiones para Flutter, y un dispositivo físico o emulador para pruebas. Crea un proyecto Flutter nuevo o utiliza uno existente.

Integración del Paquete OTP

Añade la dependencia del paquete otp a tu proyecto ejecutando en la terminal:

flutter pub add otp

Importa el paquete en el archivo Dart principal:

import 'package:otp/otp.dart';

Ejemplo de Código en Flutter

A continuación, se muestra una implementación simplificada que genera un código OTP basado en TOTP. Modifica la clave secreta con la obtenida de Github.

import 'package:flutter/material.dart';
import 'package:otp/otp.dart';

class OTPGeneratorWidget extends StatefulWidget {
  const OTPGeneratorWidget({Key? key}) : super(key: key);

  @override
  _OTPGeneratorWidgetState createState() => _OTPGeneratorWidgetState();
}

class _OTPGeneratorWidgetState extends State<OTPGeneratorWidget> {
  String _generatedCode = 'Sin código';
  final String _secret = 'INTRODUCE_TU_CLAVE_SECRETA'; // Sustituir con la clave de Github

  void _updateOTP() {
    final timestamp = DateTime.now().millisecondsSinceEpoch;
    final code = OTP.generateTOTPCodeString(
      _secret,
      timestamp,
      algorithm: Algorithm.SHA1,
      isGoogle: true,
    );
    setState(() {
      _generatedCode = code;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('OTP para Github')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('Código OTP actual:'),
            Text(
              _generatedCode,
              style: const TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _updateOTP,
              child: const Text('Generar Nuevo Código'),
            ),
          ],
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(home: OTPGeneratorWidget()));

Al ejecutar la aplicación, presiona el botón para generar un código OTP. Usa este código en el campo de verificación de 2FA en Github para completar la autenticación.

Etiquetas: Flutter Dart OTP 2FA GitHub

Publicado el 7-3 02:57