El documento describe las funcionalidades del GeneXus Access Manager (GAM) para proveer seguridad en aplicaciones web. El GAM provee autenticación y autorización de usuarios a través de su API. También permite autenticación externa a través de servicios como Facebook, Twitter y Google. El GAM genera permisos automáticamente y controla el acceso a objetos y transacciones de la aplicación.
2. Seguridad
• Infraestructura
• Seguridad a nivel de deploy de la aplicación
• Seguridad en la aplicación a nivel de programación
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21889
• Controles de autenticación / autorización - GAM
3. Aplicaciones WEB
• Autenticación
• N puntos de entrada
• Complejidad del código de control de acceso según políticas
• Autorización
• Granularidad de roles y permisos
4. GAM
• Solución de seguridad integrada en GeneXus
• Autenticación y Autorización
• Seguridad en aplicaciones WEB y Smart Devices
5. Cómo Funciona en web
• Login/Autenticación
• Chequeo de seguridad en
cada Get/Post/Ajax/etc.
APP. DB
GAM DB
WEB
APPLICATIO
N
GAM API
GETRespuesta Servicios
o Web page
POST o
Login
Usuario
Password
Session
APPLICATION SERVER
6. Escenarios
• Autenticación
• Local: Las credenciales del los usuarios residen en las propias tablas del GAM.
• Externa
• Login Facebook, Twitter, Google, WS externos (SOAP), Autenticación
Custom.
• GAM Escenarios de Autenticación
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?15937
• Autorización
• Autorización puede ser delegada.
• GAM Escenarios de Autorización
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?17583
7. Cómo habilitar el GAM
Propiedades de la versión:
• Enable Integrated Security =
TRUE
• Integrated Security Level
• None
• Authentication
• Authorization
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?19946
8. Qué ocurre a nivel de GX?
• API del GAM
•
External Objects para su acceso
• Ejemplos de uso de la API
•
•
Backend para administración del repositorio
GAMExampleLogin, GAMExampleNotAuthorized, etc.
• Creación de datastore secundario para repositorio del GAM
• Inicialización de propiedades
•
•
Usuario «admin»
Login Object for Web / SD
• Proceso de activación del GAM:
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21973
9. Qué ocurre en la aplicación?
• Control de acceso automático en cada objeto
• Control de flujo automático de la aplicación luego del control de
acceso
10. Backend del GAM
• Consola Web de administración (customizable)
•
•
•
•
•
•
•
•
GAM Users
Roles
Security Policies
Applications
Repository Configuration
Repository Connections
Authentication Types
GAM Permissions.
• GAM Web Backoffice:
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?15935
11. API del GAM
•
External objects de la librería del GAM
Métodos
Load()
Save()
Delete()
Fail()
Success()
•
•
•
•
•
Otras propiedades y métodos
GAMRole.AddPermission
GAMUser.GetRoles
etc
•
•
•
GAM API:
•
•
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?16535
13. Autorización
• Integrated Security Level = Authorization
• Propiedad Permission Prefix
• Generación de Permisos automáticos por cada objeto
• <Permission Prefix>_Execute
• Permisos de ejecución y sobre los modos de transacciones y servicios
REST
• Código del chequeo de seguridad en el generador
• GAM Autorización:
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?17918
14. Permisos en Transacciones
• En las Transacciones WEB
• <entity>_FullControl
• <entity>_Execute
• <entity>_Insert
• <entity>_Update
• <entity>_Delete
• En las Transacciones expuestas como Servicios Rest
• <entity>_Services_FullControl
• <entity>_Services_Execute
• <entity>_Services_Insert
• <entity>_Services_Update
• <entity>_Services_Delete
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?17916
15. Integración de aplicaciones con
GAM
• Problema a resolver
• Quiero integrar mi aplicación y debo autenticarme con un servicio de
terceros
16. Autenticación externa
•
Autenticación Facebook, Twitter, Google
•
•
Autenticación por web services SOAP
•
•
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21755
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?16512
Autenticación «custom»
•
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21751
17. Autenticación Externa Google
• 1º definir una aplicación cliente en el sitio de Google.
GAM Google Authentication Type:
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?20020
19. Autenticación externa: WS SOAP
• El servicio tiene que cumplir un formato de respuesta preestablecido.
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?16512
20. Autenticación externa: Custom
• Proc GeneXus (.class, .dll, .rb) o Clase externa (no GeneXus)
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21751
21. Conversión del mecanismo
tradicional de seguridad al GAM
• Problema a resolver
• Debo asociar los usuarios del GAM con los usuarios de la BD de mi
aplicación: ExternalId
• Extender los atributos de los usuarios: Atributos dinámicos de la tabla de
usuarios.
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?16552
24. Deploy de aplicaciones con GAM
• Deploy de los binarios
• Deploy de los datos
• Hardening de la configuración del repositorio
25. Deploy de aplicaciones con GAM
• Binarios
• Librerias del GAM
• Connection.gam
• Application.gam
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21219
• Datos
• GAM deploy Tool
http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?18608
26. Puesta en producción
Hardening
•
•
•
•
•
•
•
Crear nuevas Repository Connections
Verificar el código de "GAMExampleRecoverPassword”
User Recovery Password Key Timeout (minutes)
Minimum Amount Of Characters In Login
Login Attempts To Lock User
Period change password (days)
Maximum Password History Entries
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?1
8574
27. Escenarios con múltiples
repositorios
• Aplicación multitenant
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?18710
• Aplicación en diferentes “sucursales”
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?18709
• http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?1
8682
GAM esunasolucion de seguridadque se incorpora de maneraautomática en nuestraskbs.Lo liberamos en la version Evolution 2, y busca resolver tantoproblemasde autenticación como de autorizacion en nuestras apliaciones WEB y Smart Devices.
Usando el GAM vamos a contar con un alto nivel de automatización. Esdecir, el GAM comotalnosva a permitirserdeclarativos en loquequeremoshacer. Si biencontamos con una API para programar el comportamiento de la aplicación, apunta a seraltamentedeclarativo, y a reducir el código lo mas posible, porque el código de la funcionalidadestáresueltodentro del modulo del GAM.
Parahabilitar el GAM se debeir a nivel de la version de la kb y configurar la propiedad enable integrated security = true.Existeotrapropiedadcuandohabilitamos el GAM, a nivel de version, llamada Integrated Security Level quepermiteindicar el valor poromisión en cuanto a seguridad, de los objetos de la KB.Esdecir, estapropiedad se encuentra a nivel de objetotambién, y permiteindicarsi en eseobjeto se va a verificar la seguridadde maneraautomatica o no.El valor NONE de dichapropiedadindicaqueeseobjetoserápublico. El valor Authentication indicaquesólousuariosautenticadospodranejecutarlo. Si el valor de la propiedades Authorization el usuarioademás de haberseautenticadotendraqueestarautorizado para ejecutardichoobjeto.La mismapropiedad a nivel de version permiteindicar el valor pordefectoparatodos los objetos de la kb.
Que ocurre cuando se habilita la seguridad integrada?Lo primeroqueocurreesque se importa un xpzquecontieneobjetosexternos para acceder a la API del GAM.Tambien se importanopcionalmenteobjetosquehacenuso de esta API y conformanunaaplicacion a la cualllamamos backend del gam, queveremos mas adelante. Algunos de esosobjetostambién son ejemplos de login y de registraciónquepodremosusar en nuestraaplicación.Vamos a generar la aplicacion (hacer rebuild).Lo primeroqueocurreesque me preguntasideseocrear la base de datos del GAM y sustablas.Se crea en la KB un datastoresecundario con settings default en base al datastore principal en donde van a estarlastablas del GAM con repositorios, usuarios, roles, permisos, etcLuego de creadaslastablas se pueblanlasmismas con metadata.La metadata incluye la version del GAM, la creación de un repositorio de trabajo, un usuario de conexion y un usuario de aministración.La configuración del usuario de administración la vemos a nivel del environment.Este usuario de adminstracionsirve para facilitar la prototipacion, tener un usuario de partida con el cualempezar a trabajar.Se configurapordefecto la propiedad Login Object for WEB y Login Object for SD..Se genera el codigo de seguridad en cadaobjeto..Doc GAM ActivationProcess:http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21973
Que ocurre luego de configurar estas propiedades?Funcionalmente lo que ocurre es que los objetos de la kb van a requerir seguridad, lo cual implica que cuando alguno de ellos se intente ejecutar y el usuario no este autenticado en la aplicación, automáticamente se va a desplegar para él un webpanel de login, o un SD panel de login según corresponda, y una vez que el usuario ingrese sus credenciales, automáticamente se va a redirigir al objeto donde dio la excepción.
Doc GAM Web Backoffice:http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?15935
1. La propiedad Integrated Security Levela nivel de los objetos se puede configurar con el valor Authorization.Un objeto que tenga Integrated Security Level = Authorization, tiene una propiedad más que es PermissionPrefix2. Por cada objeto en esta condicion se genera un permiso, al cual llamamos permiso automático, cuyo nombre se basa en la propiedad permission_prefix del objeto. Con permiso automático nos referimos a que de manera automática se realiza el chequeo de seguridad en ese objeto, el código de chequeo de seguridad lo hace el generador, es decir, esta en el código generado.3. Se generan permisos automáticos de ejecución de los objetos tanto web como SD.Y sobre los modos de las transacciones y los servicios rest.Doc GAM Authorization:http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?17918
Recuerden que en plataforma SD la capa de negocios se resuelve a traves de servicios RESTEs por eso que se generan permisos automáticos para las transacciones expuestas como servicios rest.
En algunos casos se quiere dar la posibilidad al usuario que se pueda autenticar usando un proveedor de identidades externo.Es el caso de permitir a los usuarios de nuestra aplicación autenticarse usando facebook, twitter, google, o algunwebservice externo.Autenticación Twitter, FB, Google:Lo único que hay que hacer es ir al sitio de FB, Twitter, Google, y definir alli una aplicación cliente, luego de eso se nos va a dar un client id y un clientsecret, con esa información vamos al backend del GAM y configuramos el tipo de autenticacion que corresponde.GAM ExternalAuthenticationTypehttp://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21755
Vamos a ver como aplicar autenticación externa, por ejemplo con Google en nuestra aplicación (Facebook y twitter es similar).Primero se debe definir la aplicación cliente en el sitio de Google, lo cual nos va a dar como resultado un ClientID y ClientSecret provistos por Google.GAM Google AuthenticationType:http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?20020
Luego dese el Backend WEB vamos a crear un nuevo authenticationtypede tipo Google he ingresamos el ClientId y ClientSecret que nos proporciona Google.Con esos pasos ya tenemos configurada nuestra aplicación con autenticacion contra Google.
Autenticacion por WS externos SOAP:El servicio tiene que tener un formato de respuesta pre-establecido.Tenemos dos versiones soportadas. La version 2.0 da mayor flexibilidad dado que se pueden pasar y retornar mayor cantidad de parámetros del servicio.http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?16512
En algunos casos el proveedor de identidades externos debe manejar sesiones web, por lo cual no es posible que sea SOAP. En ese caso usamos el tipo de autenticación custom.http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?21751