Integración de Aplicaciones con SSO en Oracle Portal
Indice
Integración de Aplicaciones con SSO en Oracle Portal
1.- Introducción Indice
1.1.- Proteger aplicaciones usando mod_oss
3.- Código recomendado para abrir sesión
4.- Obtener datos del usuario logado en SSO Server
5.- Encriptar y desencriptar cookies de aplicación
6.- Registro de una aplicación asociada en el SSO Server 2.- Código recomendado para cierre de sesión
6.1.- Atributos de una aplicación asociada
8.- Asociar una aplicación a SSO paso a paso 7.- Atributos de usuario pasados a aplicaciones asociadas
8.1.- Crear la nueva aplicación asociada en el SSO
8.2.- Creación y configuración de la Base de datos de aplicaciones asociadas
8.2.- Configuración de la aplicación asociada
9.- Bibliografía y documentación
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:
- Un usuario invoca una aplicación asociada o externa al portal.
- 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.
- 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.
- 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.
- 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:
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 | ||
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);
...Code to Wipe-out application session, followed by...
// Send Dynamic Directive for login
// If you are using JAZN then you should use following code
// 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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
Para las franjas de validez de login integrado en SSO Server:
Para los daos del administrador de la aplicación:
Enter the e-mail address of the administrator of the partner application. | |
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:
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
No hay comentarios:
Publicar un comentario