Tutorial login externo usando API de Google – 2 –

Ya he explicado en un post anterior las diferentes versiones que tiene la API de Google para realizar login externos.
A mi me llevó mucho tiempo de investigación para documentarme y realizar pruebas con cada tipo de login.

Ni siquiera en los grupos de Google fueron capaces de ayudarme: Login Users with Google Apps Mensajes.

Al final llegue a descubrir que el que necesitaba era el método Sing-on (SSO) o Security Assertion Markup Language (SAML).

NOTA1: Antes de copiar el código tenéis que verificar si es el tipo de Login que necesitáis.
Este tipo de login no vale para las versiones standard, y si tenéis esa versión deberéis probar con otro tipo.

NOTA2: Antes de nada tenéis que documentaros y ver los tipos de login que ofrece la API de Google en mi antiguo post: tutorial login externo usando API de Google

Código para realizar login con Sign-on SSO

descarga el código fuente aquí:
ejemplo_saml_login

Gracias a Gon que me estuvo ayudando a mi I+D 😉

22 opiniones en “Tutorial login externo usando API de Google – 2 –”

  1. Hola, buen ejemplo, pero como podría hacer si quiero utilizar el SSO desde una aplicacion Desktop cliente/servidor, por ejemplo en el colegio donde trabajo los sistemas estan en .Net Cliente/Servidor, como podria implementar el SOO en ese escenario.

    1. Buenas Juan Carlos,

      pues me vas a perdonar pero no tengo ni idea de como integrar la API de GA con .Net
      Lo que si te puedo decir es que en la lista de código de ejemplo de SSO hay para integrar C# y ASP.Net, pero creo que ésto a ti no te resuelve nada,no?! 🙁
      Échale un ojo a este enlace y me cuentas, pero no creo que Google ha desarrollado la API para que funcione con entornos Deskop… no creo…
      http://code.google.com/p/google-apps-sso-sample/downloads/list

      Gracias

      Un saludo!

  2. Hola Hiro,

    usar el sistema simpleSMALphp de rnd.feide.no es lo peor yo estuve un par de semanas probando su código y fue mas o menos perder el tiempo.

    Hiro, lo realmente complicado es lo que preguntas y lo que yo lleve mucho tiempo para desarrollar. Es decir logear desde un servicio o web externa y acceder a Google Apps. Lo bueno es que si el formulario de login esta en tu server lo puedes personalizar como quieras.

    Sobre el login lo que tienes que hacer es primero comprobar en tu base de datos, esto es algo fundamental, pues el SSO no comprueba la contraseña sino si exite el usuario.

    Por lo que el proceso, cuando yo hice todo esto, era el siguiente:

    1.- El usuario se logea a través de un formulario en tu server.

    2.- Los datos que ha introducido los compruebas en tu propia base de datos. Por lo que cuando el usuario cambie la contraseña la tendrá que cambiar en tu máquina.

    3.- Después usas el SSO y mandas el nombre del user a GA

    El tema es que primero tienes que comprobar si el usuario existe en tu base de datos y el login y pass estan bien (en tu BBDD), después solo pasas el login a GA, ya que sólo se comprueba el login.

    Esto es lo que yo investigué y lo que yo llegue a implementar y funcionaba.

    Creo que la API tenía un método para recoger la password de GA, pero no estoy muy seguro.

  3. Pues mira he estado buscando algo sobre el ClientLogin en .Net

    He encontrado esto que son códigos de ejemplo con la librerías en .NET para la API de Google, echa un ojo al código, porque parece que tiene buena pinta.
    http://code.google.com/p/google-gdata/
    Con estas librerías parece que puedes gestionar todos o casi todos los servicios de Google en .Net:

    * Base
    * Blogger
    * Calendar
    * Spreadsheets
    * Google Apps Provisioning
    * Code Search
    * Notebook
    * Picasa Web Albums
    * Document Feed
    * Contacts
    * You Tube
    * Google Health

    Además encontré esta documentación que está bien porque viene códigos de ejemplo en .Net
    http://code.google.com/intl/es-ES/apis/gdata/docs/auth/clientlogin.html

    También he encontrado este desarrollo de una empresa u otros programadores que es un SDK para construir apps en .Net , échale un ojo porque también tiene buena pinta.

    http://code.google.com/p/lokad-sdk/

    Ya me contarás.

    Un saludo!

  4. Hola Pedro,

    He estado un par de dias peleandome con tu codigo, y por fin he conseguido que me funcione. Te quedo muy agradecido, por que con tu código me quedan las cosas bastante claras.

    De todas formas os comento los problemas que he tenido, por si pueden ayudar a alguien.

    Lo primero, la instalación del “xmlsec1” que se usa para firmar el xml, en nuestros servidores no estaba instalado, y instalandolo con el yum no funcionaba. Finalmente era por culpa de la version de las librerias “libxml2” que eran demasiado antiguas.

    También me he liado un poco por que en el zip de tu ejemplo usas un fichero .key para la variable $pubKey
    y por lo que he visto tiene que ser un fichero .cer para que la aplicacion “xmlsec1” lo pueda codificar

    Aparte he tenido que regenerar mis claves de firma, por que las que tenía generadas para usar con la aplicación de rnd.feide.no eran RSA en lugar de DSA para que puedan ser usadas por la aplicación “xmlsec1”

    Aqui explican esto ultimo:
    http://markmail.org/message/itz7eybyfurvdt3o#query:xmlsec%20Error%3A%20failed%20to%20load%20public%20key%20from+page:1+mid:qgmnycgd5chbvtsg+state:results

    1. Hola Pedro, Hiro
      Bueno despues de una semana de intento e logrado avances, logre hacer los certificados .cer (DSA) e instalado el xmlsec1 y la libreria libxml2 como aconseja hiro, pero aun me sale este error “Google Apps – Falta el parámetro de respuesta necesario, SAMLResponse” se queda en la ruta https://www.google.com/a/domain/acs.
      Pareciera que mi error fuera por XML que tengo no responden, la verdad ya se me fueron las ideas de que podria estar pasando para que no funcione.
      Me podria decir si hay datos adicionales.. derrepente instalar un paquete o el mismo xml.
      Por otro lado e provado el tutorial de moodle.. y funciona bien, pero con tu ejemplo no se que pasa que no logro exito.
      Gracias, seguire en el intento.

  5. El siguiente paso es validar el usuario, y contraseña contra la propia base de datos de google.

    Supongo que la forma mas correcta es hacerlo con OAUTH…
    Si tengo exito ya os pasaré mi código.

  6. Buenas hiro,

    muchas gracias por tu comentario y aportación!!

    Soy consciente que es posible que mi código está algo des-actualizado y está muy personalizado con lo que yo hice, pero me alegro que lo hayas conseguido!!! se que es un tremendo lio!

    Si luego quieres postear o colgar algún código de ejemplo adicional me lo dices y lo haré encantado. Puedo hacer referencia, si tienes, a tu web o blog.

    Un saludo!

  7. Hola pedro, estaba revisando tu código y encuentro en saml_util.php que aparece un archivo xml dentro de un directorio templates, ese archivo que hace o que es?

  8. Hola probe el ejemplo.. pero me sale que no puedo acceder a la pagina “Google Apps – Este dominio no está configurado para utilizar la función “Inicio de sesión único”.” me podrian decir la razon del xq no me sale 🙁

  9. Hola, en el formulario de ingreso de Datos del Sign-on SSO me pide un archivo certificado que debe contener la clave publica, este paso no lo has posteado? uhmmmm no encuentro como hacerlo, por otro lado tengo una cuenta premium con 2 usuarios pero no aparece el link para habilitar el SSO.. muy raro¿?, despues me alcanzaron una cuenta de Educacion y ahi si estaba la opcion y es caso que comento del registro del SSO, gracias por el articulo, es de mucha ayuda.
    Saludos desde Peru

    1. Buenas Alan!

      Pues esto que hice de la API de login con SSO de Google fue hace mas de un año y la verdad que no recuerdo muy bien. Ahora que lo dices si que recuerdo que había que generar unas claves, creo que en un de los codigos de ejemplo que tengo hay un archivo con una clave (que es un ejemplo).

      Todo esto cuando lo hice fueron meses de desarrollo y tuve que probar e investigar un monton de posibilidades y códigos. Además cuando lo hice tenia una cuenta “partner” porque lo estaba haciendo para un grupo de empresas que es bastante grande y tenia acuerdos con google, de manera que no lo he llegado a probar en una cuenta premium, standard o de educacion.

      Es posible que la API haya cambiado algo (o mucho), si te soy sincero no tengo mucha idea.

      Pueba a descargar todos los códigos de ejemplo que tengo. Lee el otro artículo que escribí http://www.pedroventura.com/blog_programacion/2009/06/23/login-externo-usando-api-de-google-apps/, investiga todos los links externos que algunos eran interesantes o había mas códigos de ejemplo. Ahora no me acuerdo porque como te he dicho fue muy complejo y un proyecto largo pero investiga todo esto que te he dicho, si sigues igual, me lo comentas y le echo un ojo a la API para refrescar la memoria.

      Ánimo!

  10. Hola Pedro
    Seria genial si me das la mano para generar eso clave que pide el registro del SSO, xq ni idea por donde empezar, lo unico que en el archivo de ejemplo apararece “DSAPublicKey01.key” y probe con ese y obviamente me salio error al simular “Google Apps – Falta el parámetro de respuesta necesario, SAMLResponse.”
    He estado leyendo que tengo que ejecutar unos comandos para generar :S, tambien te comento que e visto q hace tiempo se lleva un proyecto moodle con app que parece estar madurando, chekea esta pagina: http://learningischange.com/2009/02/25/the-killer-app-google-apps-and-moodle-integration/ se ve muy interesante y atractivo.
    Gracias, por la respuesta, es bueno saber que alguien te escucha
    Saludos

  11. Hola Pedro, no tengo experiencia en programacion mas bn se me olvido jeje…. te queria preguntar como hago en google apps for education para configurar una api donde me haga una firma institucional para todos los usuarios en ves de hacerlo uno por uno… estuve avergiuando y me dicen que aqui
    https://apps-apis.google.com/a/feeds/emailsettings/2.0/{domain}/{username}/signature, pero estoy super bloqueado no se que hacer gracias por lo atencion que le prestes. cambie el domain por mi dominio asociado y el username por el administrado pero jum dice que error no se que… como haria? me das una luz? gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *