148 votos

¿Google Authenticator está disponible como servicio público?

¿Existe una API pública para utilizar el Autenticador de Google (autenticación de dos factores) en aplicaciones web autoejecutables (por ejemplo, pila LAMP)?

121voto

Will Hartung Puntos 57465

El proyecto es de código abierto. No lo he utilizado. Pero utiliza un algoritmo documentado (que figura en la RFC que aparece en la página del proyecto de código abierto), y las implementaciones del autentificador admiten múltiples cuentas.

El proceso actual es sencillo. El código de una sola vez es, esencialmente, un generador de números pseudoaleatorios. Un generador de números aleatorios es una fórmula que, una vez dada una semilla, o número inicial, sigue creando un flujo de números aleatorios. Dada una semilla, aunque los números pueden ser aleatorios entre sí, la secuencia en sí es determinista. Por lo tanto, una vez que el dispositivo y el servidor están "sincronizados", los números aleatorios que crea el dispositivo, cada vez que se pulsa el "botón de número siguiente", serán los mismos números aleatorios que espera el servidor.

Un sistema de contraseña segura de un solo uso es más sofisticado que un generador de números aleatorios, pero el concepto es similar. También hay otros detalles que ayudan a mantener el dispositivo y el servidor sincronizados.

Por lo tanto, no hay necesidad de que alguien más albergue la autenticación, como, por ejemplo, OAuth. En su lugar, es necesario implementar ese algoritmo que es compatible con las aplicaciones que Google proporciona para los dispositivos móviles. Ese software está (debería estar) disponible en el proyecto de código abierto.

Dependiendo de su sofisticación, debería tener todo lo que necesita para implementar el lado del servidor de este proceso dar el proyecto OSS y el RFC. No sé si hay una implementación específica para su software de servidor (PHP, Java, .NET, etc.)

Pero, en concreto, no necesitas un servicio externo para gestionar esto.

3 votos

Por otro lado, utilizar una solución ya existente, bien conocida y fácil de conseguir, disponible en muchos dispositivos móviles diferentes, es de gran beneficio...(hint hint)

28 votos

¿Te refieres a los SMS? Es lento, poco fiable y costoso.

0 votos

He escrito un blog sobre cómo implementar Google Authenticator/RFC6238 compatible con 2fa para sitios web en java puro: asaph.org/2016/04/google-authenticator-2fa-java.html (enchufe desvergonzado)

58voto

russau Puntos 4835

El algoritmo está documentado en RFC6238 . Va un poco así:

  • su servidor da al usuario un secreto para instalar en Google Authenticator. Google hace esto como un código QR documentado aquí .
  • Google Authenticator genera un código de 6 dígitos a partir de un SHA1-HMAC de la hora de Unix y el secreto (hay muchos más detalles sobre esto en el RFC)
  • El servidor también conoce la hora secreta/unix para verificar el código de 6 dígitos.

He jugado a implementar el algoritmo en javascript aquí: http://blog.tinisles.com/2011/10/google-authenticator-one-time-password-algorithm-in-javascript/

21voto

James Puntos 121

Hay una variedad de bibliotecas para PHP (The LAMP Stack)

PHP

https://code.google.com/p/ga4php/

http://www.idontplaydarts.com/2011/07/google-totp-two-factor-authentication-for-PHP/

Hay que tener cuidado al implementar la autenticación de dos factores, hay que asegurarse de que los relojes del servidor y del cliente están sincronizados, de que hay protección contra los ataques de fuerza bruta al token y de que la semilla inicial utilizada es adecuadamente grande.

0 votos

El contenido era genial, pero cualquiera que utilice el primer enlace debería implementar los métodos de prevención de inyección SQL, ya que hay algunos fallos potenciales. Mira las cuestiones planteadas para el primero. El segundo enlace es perfecto.

9voto

Tadeck Puntos 37046

Puedes utilice mi solución publicado como la respuesta a mi pregunta (hay código Python completo y explicación ):

Implementación de Google Authenticator en Python

Es bastante fácil implementarlo en PHP o Perl, creo. Si tiene algún problema con esto, por favor hágamelo saber.

También he he publicado mi código en GitHub como módulo de Python.

1 votos

Un poco después del hecho... Sólo quería seguir mencionando que hay un módulo Perl en CPAN: Auth::GoogleAuthenticator ( search.cpan.org/dist/Auth-GoogleAuthenticator ).

6voto

user1893983 Puntos 53

Encontré esto: https://github.com/PHPGangsta/GoogleAuthenticator . Lo he probado y me funciona bien.

1 votos

Creo que preferirías github.com/RobThree/TwoFactorAuth . Se basa en la biblioteca anterior, pero es una gran mejora de la misma con más características y una documentación más clara.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X