El escenario que describiremos a continuación es cuando se quiere integrar aplicaciones GeneXus que utilizan el GAM cómo método de autenticación y se quiere que GXportal también haga la autenticación contra el mismo GAM de forma de usar los mismos usuarios y roles definidos en el GAM.
Integración en la Base de conocimiento
Lo primero que debemos hacer es instalar el User Control GXportal en la instalación de GeneXus que se está usando para generar la aplicación.
Luego tenemos que importar el XPZ de ejemplo de GXportal SSO dentro de la Base de Conocimiento GeneXus que se quiere integrar dentro de GXportal. Este XPZ contiene el web service gamwslogin que hace el login contra el GAM y si el usuario es correcto devuelve la información básica del usuario más la lista de roles del mismo.
En el webpanel de login agregar el User Control GXportal en el Webform, configurar en la propiedad domain de este User Control la primera parte de la URL donde ejecutará la aplicación sin el directorio virtual, por ejemplo http://myserver.com . Luego en el evento donde se hace el login contra el GAM luego de haber verificado que el login contra el GAM fue exitoso agregar esta línea de código
GXportal.Login(&UserName, &UserPassword, &IdLink)
Donde las variables &UserName y &UserPassword son las mismas que se usan para hacer el login en el GAM y la variable &IdLink es un númerico y permite pasar el código de un Link definido en GXportal en la opción Diseño → Links para que luego de hacer el login dentro de GXportal se haga la redirección a ese link.
Crear un webpanel para hacer el logout tanto desde el GAM cómo en GXportal. Colocar en el webform de este webpanel el User Control GXportal y configurar la propiedad domain igual que en el caso del login. El evento logout tiene que tener el siguiente código para terminar la sesión en el GAM y en GXportal
Event ‘Logout’
&OK = GAMRepository.Logout(&Errors)
GXportal.Logout(&IdLink)
Endevent
Donde &IdLink es un parámetro opcional e indica el código de Link definido en GXportal donde queremos que redireccione luego de hacer el logout, si no se indica nada se hará el logout y se dejará al usuario en la página actual.
Configuración de la autenticación en GXportal
Nota: si no está utilizando la versión SaaS de GXportal tiene que aplicar una actualización sobre su instalación de GXportal 5.2.
Una vez que generamos el servicio tenemos que configurar GXportal para que haga la autenticación utilizando el mismo, para esto desde el Panel de Control ir a la opción Seguridad y desde ahí al Tab Web Service Externo. En esta pantalla debe configurar donde está el Web Service como se muestra en la siguiente captura:
Es importante acá generar una nueva clave de encriptación con el botón “Generar clave” y modificar en el código del servicio gamwslogin la línea donde se asigna dicha clave a la variable &Key. Esta clave se usa para encriptar la información que se usa para la comunicación entre GXportal y el servicio de autenticación.
Desde esta misma pantalla luego de grabar los datos puede ingresar un usuario y contraseña definido en el GAM y usar el botón Probar para verificar que la integración de la autenticación haya quedado bien. En el Tab General se debe configurar que el “Tipo de Autenticación” sea “Web Service Externo” a partir de este momento para autenticarse al backend de GXportal para el sitio configurado se deben utilizar usuarios definidos en el GAM y lo primero que debe hacer es asignarle el rol de administrador del sitio a alguno de esos usuarios utilizando el usuario GXPADMIN.
Para finalizar lo que debemos hacer es embeber el webpanel de login dentro de una página de GXportal y lo mismo con la opción de logout. De esta forma cuando el usuario accede a la página de login va a ejecutar el webpanel de login que al momento de que el usuario ingresa sus datos va a generar la sesión en el GAM y luego generará la sesión en GXportal y redireccionará a donde se le haya especificado.
El resto de los webpanels que son embebidos en GXportal no es necesario agregarles nada más dado que hacen el chequeo de la sesión contra el GAM.