Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Note

Under contruction
Being translated

Single Sign-On

...

in O3

La funcionalidad de O3's Single sign-on (login único) en las herramientas web de IdeaSoft se realiza mediante CAS.

Esta funcionalidad está habilitada por defecto como una válvula del Tomcat que ejecuta dentro del JBoss y que se encarga de interceptar el login y administrarlo correctamente a través de CAS.

Se encuentra definida en el archivo is performed through the use of CAS.

This functionality is enabled by default as a Tomcat Valve inside the JBoss. This valve intercepts the login and manages it through CAS.

This Valve is defined in the file <O3>/jboss/server/default/deploy/jbossweb-tomcat55.sar/server.xml:

Code Block
<!-- CAS SSO -->
<Valve className="com.ideasoft.sso.cas.tomcat.CASSingleSignOnValve"
    debug="0"
    filteredApps="/o3process,/o3portal,/o3planner,/liferay"/>

Propuesta para SSO entre una aplicación web existente y O3 utilizando mecanismo de ticket

Este es un ejemplo de cómo se puede implementar el macanismo de SSO para evitar el doble login en o3portal, considerando que el usuario ya se encuentra loqueado en otra aplicación (aplicación X, de ahora en más). Características de la implementación:

  • Se utiliza un mecanismo de SSO basado en tickets.
  • El ticket debe ser generado por la aplicación en la que se loguea el usuario y almacenado en una base de datos. El único requerimiento de dicha base de datos es que sea accesible por el servidor O3 a través de un driver JDBC.
  • Los usuarios deben estar definidos en los dos sistemas (en la aplicación X y en O3). Dependiendo del respositorio de usuarios que la aplicación X proveea, se podrá integrar a O3 (por ejemplo LDAP), evitando tener que mantener la doble definición de usuarios.

Cómo funciona este mecanismo de SSO?:

  1. El usuario ingresa a la aplicación X, y en el momento que desea acceder al O3Portal se genera el ticket y se almacena en la base de datos (más adelante se propone el esquema de la tabla a utilizar).
  2. Cuando la aplicación genera un link al O3Portal, éste llevaría el ticket como argumento de la URL
  3. O3 recibe el ticket y consulta la base de datos, para validar el ticket y obtener el nombre del usuario conectado
  4. O3 es quien elimine de la base de datos el ticket inmediatamente después de ser validado el usuario.

Base de datos

Debe existir una tabla llamada SSO_TICKETS con los siguientes campos:

...

Campo

...

Tipo

...

SSO between a web application (X) and O3 using tickets

What follows is an example of how to implement the SSO mechanism to prevent the system to request multiple logins in the same session

Details about the implementation:

  • SSO based on tickets is used.
  • Ticket must be generated by the application where the user logs in, and stored in a database.
    The only requirement about the database is that it should be accesible by the O3 Sesrver through a JDBC driver.
  • Users must be defined in both applications (X and O3).
    Depending on the user repository configured for X, it might be possible to integrate it with O3's repository (i.e. LDAP), avoiding the duplication of users in two separate repositories.

How does this SSO mechanism work?

  1. User logs into application X. When the user wishes to swith to O3 Portal, a new ticket is generated and stored in the database. (following are more details about the database schema to use).
  2. When the application X provides a link to O3 Portal, this link should contain the ticket a part of the URL
  3. O3 receives the ticket, queries the database to validate it and retrieve the username
  4. O3 then eliminates the ticket from the database as soon as the user is validated.

Database

A table named SSO_TICKETS should exist with the following fields:

Field

Type

Description

Ticket

Varchar(100)

 

Ticket_TS

Timestamp Fecha

y hora de creación del ticket Date and time when the ticket was created

UserName

Varchar(50)

Login del usuario conectado

Expiración

Se propone utilizar el campo Ticket_TS para la validación del Ticket, es decir cuando O3 valida el Ticket además de verificar que existe un registro en la tabla, se aseguraría de que el tiempo de vida no sea mayor a un valor predeterminado, por ejemplo un día. Esto sería para evitar que si no se eliminó correctamente un ticket no permita el ingreso por tiempo indeterminado. El valor del tiempo expiración se debe definir a través de un parámetro.

Características que debería cumplir el ticket

El ticket puede ser cualquier texto pero es recomendable:

  • Que sea único, en general se utiliza la hora de la máquina como uno de sus componentes para garantizar esa unicidad
  • Que no sea fácil de generar, por ejemplo que no sea un número secuencial, que permitiría "adivinar" un valor válido

...

Username of user connected

Expiration

The field Ticket_TS is used to validate the ticket. The data in this field is used by O3 to make sure that the ticket has not been created for more than the predefined lifetime for the tickets. The expiration time is defined with a parameter.

Characteristics of the ticket

The ticket can be any text but the following is advisable:

  • The ticket should be unique, generally the time of the machine is used as part of the ticket to ensure that it is not repeted
  • The ticket should be hard to generate, i.e. it should not be a sequential number that would allow a process to "guess" a valid value

There is a Java Class that could help generating this ticket. This class is java.rmi.server.UID

Configuración de SSO según la propuesta planteada.

Se debe de configurar una válvula que es la encargada de correr la lógica de verificación del ticket.
Para esto se debe de tener en cuenta los siguientes puntos:

...

Code Block
create table SSO_TICKETS(Ticket Varchar(100) NOT NULL
	,Ticket_TS TIMESTAMP NOT NULL
	,UserName Varchar(50) NOT NULL
	,CONSTRAINT PK_SSO_TICKETS PRIMARY KEY(Ticket))

Problemas con CAS ejecutando detrás de un firewall

Cuando se utiliza O3 Portal detrás de un firewall puede ocurrir que luego de la pantalla de login aparezca una pantalla en blanco, esto es causado por un problema en el módulo de validación de CAS, que ocurre cuando el servidor no se puede conectar a si mismo con el nombre de host ingresado por el usuario en la URL del navegador.
Es decir que esto ocurre si el usuario accede a 'http://www.company.com/o3portal' y el servidor O3 no puede acceder al host www.company.com en el puerto 80.

...