lunes, 26 de febrero de 2007

Aplicaciones Asociadas a SSO en Oracle AS Portal

Integración de Aplicaciones con SSO en Oracle Portal

Indice

Integración de Aplicaciones con SSO en Oracle Portal 1
. 2Indice
1.- Introducción. 3

1.1.- Proteger aplicaciones usando mod_oss. 4

. 62.- Código recomendado para cierre de sesión
. 63.- Código recomendado para abrir sesión
74.- Obtener datos del usuario logado en SSO Server
. 85.- Encriptar y desencriptar cookies de aplicación
6.- Registro de una aplicación asociada en el SSO Server 8

6.1.- Atributos de una aplicación asociada. 10

. 117.- Atributos de usuario pasados a aplicaciones asociadas
8.- Asociar una aplicación a SSO paso a paso. 13

8.1.- Crear la nueva aplicación asociada en el SSO.. 13

8.2.- Creación y configuración de la Base de datos de aplicaciones asociadas. 15
8.2.- Configuración de la aplicación asociada. 17
9.- Bibliografía y documentación. 19


1.- Introducción

Con el fín de integrar varias aplicaciones bajo el mismo sistema de autenticación, Oracle proporciona dos componentes que los desarrolladores pueden utilizar para simplificar el desarrollo en un entorno de aplicaciones empresariales:

· El SSO de Oracle AS permite la autentificación de todos los usuarios mediante un único nombre y contraseña, centralizando la administración de conexión de todos los usuarios.

· El portal de Oracle AS integra datos de fuentes diversas. Las páginas del Portal de Oracle AS controlan el contenido en regiones llamadas portlets que muestran datos de otros sitios Web o aplicaciones.

Oracle Portal permite el intercambio de datos de sesión de SSO a través de cookies y proporciona un SDK, que incluye ejemplos explicativos, para obtener, crear y modificar cookies entre distintas aplicaciones para obtener datos del usuario logado, obtenerlos, modificarlos o crear nuevos datos o, incluso, redireccionar automáticamente a páginas de SSO si es necesario (por usuario no logado, sesión expirada,…) o comprobar las credenciales de acceso. Estas cookies, si existen, poseen datos encriptados.

En conclusión, esta SDK permite interactuar con el servidor SSO de Oracle Portal. El archivo que se debe importar en cada aplicación es “ssosdk902.jar” junto con el “ssosdk902.zip” que viene con código fuente de ejemplo, y se encuentran en la carpeta siguiente:

$INFRA_HOME/sso/lib, donde $INFRA_HOME es el raiz de Oracle Infraestructura

El siguiente diagrama muestra el flujo de información en la integración de aplicaciones con SSO Server:

Aquí se explica paso a paso como el SSO utiliza las cookies para autenticar a usuarios en otras aplicaciones:

  1. Un usuario invoca una aplicación asociada o externa al portal.
  2. La aplicación busca en el navegador del usuario la cookie de login. Si se encuentra presente, autentica al usuario a través de la información cifrada en la cookie. Si la cookie de login no está presente, la aplicación redirecciona de forma transparente hacia la página de autenticación de SSO Server.
  3. El servidor de SSO muestra la página de conexión para aceptar el usuario y contraseña y fija una cookie de conexión o login si las credenciales son válidas.
  4. Después de autenticar al usuario, el servidor de SSO transparentemente vuelve a redireccionar a la aplicación correspondiente usando un URL con un parámetro cifrado que identifica al usuario.
  5. La aplicación asociada debe encargarse de descifrar el parámetro, establecer su propio mantenimiento de la sesión (por ejemplo, determinando qué privilegios debe conceder al usuario), y mantener el sistema de cookies de modo que no se necesite volver a dirigir el flujo al servidor de SSO.

El SSO SDK se puede obtener de la siguiente ruta:

[ORACLE_INFRAESTRUCTURE]/sso/lib/ssosdk902.zip

El javadoc de este paquete lo podemos leer en la siguiente ruta:

http://ftp.unex.es/oradoc/application_server_10g/manage.904/b10422/toc.htm

Es necesario instalar el SSO SDK, siguiendo los pasos del fichero fichero “ReadMe.txt”.

1.1.- Proteger aplicaciones usando mod_oss

En Oracle AS se puede utilizar mod_osso, un módulo de la autentificación del servidor de HTTP de Oracle, que permite el acceso único simple a través de SSO. es un alternativa simple al SSO SDK, usado en otras versiones para integrar aplicaciones. El mod_osso simplifica el proceso de autenticación sirviendo las utilidades del SSO a aplicaciones externas.

Mod_osso puede redireccionar al usuario al módulo de autentificación SSO únicamente si la url llamad se encuentra protegida.

Existe dos métodos de protección usando mod_osso:

· Proteger URLs estáticamente

· Proteger URLs dinámicamente

1.1.1.- Proteger URLs estáticamente

Se utiliza el fichero “mod_osso.conf” situado en la carpeta “%INFRA_HOME%/Apache/Apache/conf” de la carpeta de Oracle AS Infraestructura. En el siguiente ejemplo podemos observar como se protege la url ‘/private’ para que requiera un usuario válido:

AuthType Basic

require valid-user

Ejemplo: http://ftp.unex.es/oradoc/application_server_10g/manage.904/b10852/mod_osso.htm#1006382

1.1.2.- Proteger URLs dinámicamente

Se utilizan cabeceras como las que se muestran en la tabla siguiente:

Directiva

Código de estado

Cabeceras

Petición de autenticación

401, 499

-

Petición forzada de autenticación

499

Osso-Paranoid:true

Single Sign-Off

470

Osso-Return-URL

Esta es la URL de retorno despues de completar el ‘single sign-on’

Ejemplo: http://ftp.unex.es/oradoc/application_server_10g/manage.904/b10852/mod_osso.htm#1006437

2.- Código recomendado para cierre de sesión

// Clear application session, if any

String l_return_url := return url to your application e.g. home page

response.setHeader( "Osso-Return-Url", l_return_url);

response.sendError( 470, "Oracle SSO" );

3.- Código recomendado para abrir sesión

// Get user name from application session. This session was

// established by the application or OC4J session

String username = request.getSession().getAttribute('USER_NAME');

// Get subscriber name from application session. This session was

// established by the application or OC4J session

String subscriber = request.getSession().getAttribute('SUBSCRIBER_NAME');

// Get user security information from application session. This session // was

established by the application or OC4J session

String user_sec_info = request.getSession().getAttribute('USER_APP_SEC');

// Get username and subscriber name from JAZN API */

JAZNUserAdaptor jaznuser = (JAZNUserAdaptor)requset.getUserPrincipal();

String ssousername = jaznuser.getName();

String ssosubscriber = jaznuser.getRealm().getName();

// If you are not using JAZN api then you can also get the username and

// subscriber name from mod_osso headers

String ssousername = request.getRemoteUser();

String ssosubscriber = request.getHeader('OSSO-SUBSCRIBER');

// Check for application session. Create it if necessary.

if((username == null) || (subscriber == null) )

{

...Code to create application session. Get the user information from

JAZN api(or mod_osso headers if you are not using JAZN api) and populate

the application session with user, subscriber and user security info...

}

if((username != null)&&(subscriber != null)

&&(ssousername != null)&&(ssosubscriber != null)

&&(username.equalsIgnoreCase(ssousername) == 0 )

&&(subscriber.equalsIgnoreCase(ssosubscriber) == 0))

{

// Show personalized user content

show_personalized_page(username, subscriber, user_sec_info);

}

else

{

...Code to Wipe-out application session, followed by...

// Send Dynamic Directive for login

// If you are using JAZN then you should use following code

// response.sendError( 401);

// If you are not using JAZN api then you should use following code

// response.sendError( 499, "Oracle SSO" );

}

4.- Obtener datos del usuario logado en SSO Server

Al obtener de la sesión el usuario de tipo SSOUserInfo, podemos leer de él la siguiente información:

Method Summary

java.lang.String

getIPAddress()
Returns the IP address of the user's computer.

java.lang.String

getLocale()
Returns locale information.

int

getSSOTimeRemaining()
Returns the remaining session time.

java.lang.String

getSSOUserName()
Returns the authenticated user name.

java.lang.String

getSubscriberDN()
Returns the directory DN of the subscriber.

java.lang.String

getSubscriberGuid()
Returns the directory GUID of the subscriber.

java.lang.String

getSubscriberName()
Returns the subscriber name.

java.lang.String

getUrlRequested()
Returns the requested URL.

java.lang.String

getUserDN()
Returns the directory DN of the user.

java.lang.String

getUserGuid()
Returns the directory GUID of the user.

5.- Encriptar y desencriptar cookies de aplicación

La clase del SSO SDK, SSOEnabler.class, posee los siguientes métodos de encriptación que habrá que invocar cuando se cree o lea cualquier cookie de sesión:

java.lang.String decryptCookie(java.lang.String p_listenerToken, java.lang.String p_encryptedCookie)

java.lang.String encryptCookie(java.lang.String p_listenerToken, java.lang.String p_appCookie)

6.- Registro de una aplicación asociada en el SSO Server

En la siguiente ruta deberemos dar de alta nuestra aplicación para incluirlo en el sistema de acceso único de SSO Server, con los parámetros asociados correspondientes:

http://[SERVIDOR]:[PUERTO]/pls/orasso/orasso.home

El puerto por defecto suele ser el 7777. El acceso se debe de realizar con el usuario administrador (orcladmin). Una vez iniciado aparecerá la siguiente pantalla:

Pulsamos el enlace ‘Administrador del Servidor SSO’ y nos aparece la siguiente pantalla:

Seleccionamos ahora ‘Administrar Aplicaciones Asociadas’. Nos aparece:

Pulsamos ‘Agregar Aplicación Asociada’ y escribimos todos los datos que nos solicitan, nos creará unas URLs de conexión y desconexión automáticamente:

6.1.- Atributos de una aplicación asociada

Para el login:

Field

Description

Name

Enter a unique name for the partner application.

Home URL

Enter the URL of the home page for the application.

Success URL

Enter the URL to the routine responsible for establishing the partner application's session and session cookies. This routine should redirect the browser to the URL that the user originally requested.

The URL must point to a procedure that processes the user identification information from the single sign-on server. Include the http:// prefix in the URL. The following example shows a success URL for OracleAS Portal:

http://server.domain.com:5000/pls/DAD/portal.wwsec_app_priv.process_signon

Logout URL

Enter the URL for the logout routine of the application. The single sign-off page invokes this URL in parallel with others, enabling users to simultaneously log out of the server and active partner applications.

Para las franjas de validez de login integrado en SSO Server:

Field

Description

Start Date

Enter the date when users are first able to access the partner application through the single sign-on server. Use the format shown next to the field label.

End Date

Enter the date when users are last able to access the partner application through the single sign-on server. Use the format shown next to the field label.

Note: If you leave this field blank, this partner application is valid for an indefinite period.

Para los daos del administrador de la aplicación:

Field

Description

Administrator E-mail

Enter the e-mail address of the administrator of the partner application.

Administrator Information

Enter any additional information that you want to include about the administrator of the partner application.

7.- Atributos de usuario pasados a aplicaciones asociadas

Listado de todos los atributos que ‘mod_osso’ pasa a las aplicaciones asociadas:

HTTP Header Name

Description

Source

Use as Key or Handle?

Osso-User-Guid

Single sign-on user's globally unique user ID (GUID)

Single sign-on user's globally unique user ID (GUID)

Recommended

Osso-Subscriber-Guid

Realm GUID

Realm entry in Oracle Internet Directory

Recommended

Remote-User

User nickname as entered by user on the login page

Single sign-on login page

Recommended for pre-9.0.4 applications, but not for 9.0.4 applications.

Osso-Subscriber

User-friendly name for a realm

Realm entry in Oracle Internet Directory

Recommended for pre-9.0.4 applications, but not for 9.0.4 applications.

Accept-Language

Language and territory in ISO format

Single sign-on server

Not applicable

Osso-User-Dn

Single sign-on user's distinguished name (DN)

User entry in Oracle Internet Directory

Not recommended. Use GUID headers to perform user searches in Oracle Internet Directory. Deprecated.

Osso-Subscriber-DN

Realm DN

Realm entry in Oracle Internet Directory

Not recommended. Use GUID headers to perform user searches in Oracle Internet Directory. Deprecated.

8.- Asociar una aplicación a SSO paso a paso

Para asociar una aplicación a SSO hay que seguir los siguientes pasos, no necesariamente en el mismo orden:

8.1.- Crear la nueva aplicación asociada en el SSO

· Acceder a la consola de administración de SSO, normalmente se encuentra en la siguiente ruta:

http://[HOST_INFRAESTRUCTURA]:7777/pls/orasso/ORASSO.home

Por ejemplo,

http://localhost:7777/pls/orasso/ORASSO.home

· Conectar con el usuario ‘orcladmin’, aparecerá mas o menos la siguiente ventana:

· Entrar en la opción ‘Administración del servidor SSO’, luego en ‘Administrar Aplicaciones Asociadas’ y, por último, en ‘Agregar Aplicación Asociada’, Debemos ver algo tal que así:


· Rellenamos los datos de nuestra aplicación, para ello debemos tener en cuenta que en las urls de conexión y desconexión, debemos poner la ruta a los jsps o servlets proporcionados por el ejemplo que indicaremos más adelante (ssodemo).

· La aplicación generará automáticamente una serie de parámetros que debemos apuntar pues nos servirán más adelante:

o Identificador

o Elemento

o Clave de Cifrado

o URL de Conexión

o URL de Desconexión Única

Podemos consultarlos pulsando sobre el enlace ‘editar’ de nuestra aplicación asociada, creada anteriormente:

8.2.- Creación y configuración de la Base de datos de aplicaciones asociadas

Es necesario instalar o tener una instancia accesible de la base de datos para aplicaciones asociadas, cuyos scripts de instalación se proporcionan en el paquete ‘ssosdk902.zip’. Seguir los siguientes pasos para su configuración:

· Si no existe se instala creando un esquema nuevo o utilizando uno existente, según los scripts del paquete de desarrollo de sso.

· Una vez creado hay que ejecutar sobre dicha base de datos el siguiente script, también existente en dicho paquete, para instalar la aplicación anteriormente dada de alta el el administrador de SSO de Oracle: regapp.sql.

A continuación ponemos las sentencias a ejecutar para su comodidad:

PROMPT

PROMPT Partner Application Configuration

PROMPT

PROMPT

declare

l_listener_token varchar2(255);

l_site_token varchar2(255);

l_site_id varchar2(255);

l_login_url varchar2(2000);

l_logout_url varchar2(2000);

l_cookie_version varchar2(80);

l_encryption_key varchar2(1000);

l_ip_check varchar2(1);

begin

l_listener_token := '&Listener_Token';

l_site_id := '&Site_ID';

l_site_token := '&Site_Token';

l_login_url := '&Login_URL';

l_cookie_version := 'v1.2';

l_encryption_key := '&Encryption_Key';

l_ip_check := '&IP_Check';

begin

wwsec_sso_enabler.delete_enabler_config

(

p_lsnr_token => l_listener_token

);

exception

when others then null;

end;

wwsec_sso_enabler.create_enabler_config

(

p_lsnr_token => l_listener_token

,p_site_token => l_site_token

,p_site_id => l_site_id

,p_ls_login_url => l_login_url

,p_ls_logout_url => ''

,p_url_cookie_version => l_cookie_version

,p_encryption_key => l_encryption_key

,p_ipaddr_check => l_ip_check

);

wwsec_sso_enabler.get_enabler_config

(

p_lsnr_token => l_listener_token

,p_site_token => l_site_token

,p_site_id => l_site_id

,p_ls_login_url => l_login_url

,p_ls_logout_url => l_logout_url

,p_url_cookie_version => l_cookie_version

,p_encryption_key => l_encryption_key

,p_ipaddr_check => l_ip_check

);

dbms_output.put_line('------------------------------------------------ ');

dbms_output.put_line('Registration successful. ');

dbms_output.put_line('Listener token: ' || l_listener_token);

dbms_output.put_line('Site id : ' || l_site_id);

dbms_output.put_line('Site token : ' || l_site_token);

dbms_output.put_line('Encryption key: ' || l_encryption_key);

dbms_output.put_line('Login URL : ' || l_login_url);

dbms_output.put_line('Logout URL : ' || l_logout_url);

dbms_output.put_line('IP check : ' || l_ip_check);

dbms_output.put_line('------------------------------------------------ ');

exception

when others then

dbms_output.put_line('------------------------------------------------ ');

dbms_output.put_line('ERROR: Error in registration. Please try again');

dbms_output.put_line(sqlerrm);

dbms_output.put_line('------------------------------------------------ ');

end;

/

commit;

Durante la ejecución de estas sentencias se le solicitará una serie de parámetros cuya relación con los campos que se definieron en el punto 8.1, es la siguiente

CAMPO SOLICITADO

DATO RELACIONADO

LISTENER_TOKEN

NOMBRE DEL SERVIDOR

(Por ej., sev-des-app.tb-solutions.com)

SITE_ID

IDENTIFICADOR, de la conexión a la aplicación asociada (Por ej., 52F81BF5)

SITE_TOKEN

ELEMENTO, de la conexión a la aplicación asociada (Por ej., 87TIUG4K52F81BF5)

LOGIN_URL

URL DE CONEXIÓN, de la conexión a la aplicación asociada (Por ej., http://localhost:7777/pls/orasso/ orasso.wwsso_app_admin.ls_login)

ENCRYPTION_KEY

CLAVE DE CIFRADO, de la conexión a la aplicación asociada (Por ej., 95A79762E9BA8D18)

IP_CHECK

Y o N, indica si se debe filtrar por IP las cookies o no. Poner por defecto N.

8.2.- Configuración de la aplicación asociada

· Importar la librería ‘ssosdk902.jar’ proporcionada por el SDK de SSO.

· Importar la librería para realizar consultar con la base de datos de aplicaciones asociadas.

· Ver los ejemplos que posee el SDK de SSO y crearse una solución a medida.

· Por último, ya que podemos probar la sesión y obtener el usuario dado de alta en SSO, deberemos obtener dicho usuario y habilitar o deshabilitar permisos sobre páginas privadas para dicho usuario según la funcionalidad requerida. Todo el control de permisos en este caso lo debe realizar la aplicación asociada correspondiente. Sería conveniente crear un servicio de comprobación de permisos de usuarios o que sirva para relacionar los usuarios de SSO con los propios de la aplicación asociada.

9.- Bibliografía y documentación

Using Oracle9iAS Single Sign-On

http://www.oracle.com/technology/sample_code/products/iportal/htdocs/sso/ssoover.html

Writing Partner Applications Using Java APIs

http://www.di.unipi.it/~ghelli/didattica/bdl/A97329_03/manage.902/a96114/examples.htm#1002397

Oracle® Application Server Single Sign-On Application Developer's Guide

http://ftp.unex.es/oradoc/application_server_10g/manage.904/b10852/toc.htm

Adding Partner and External Applications

http://12.46.245.173/help/wvpartnr.htm

Oracle9iAS Single Sign-On Administrator's Guide

http://www.di.unipi.it/~ghelli/didattica/bdl/A97329_03/manage.902/a96115/toc.htm

Imágenes Dockers

Estoy aprendiendo bastante sobre el tema de docker y docker swarm , gestión de Stacks, Servicios, Containers, Volumenes, .. y sus configurac...