Cataloga un token en la tabla wic_conf:wic_user_token_process para otorgar permiso de ejecución de un proceso a un usuario sobre una determinada base de datos, devolviendo la url que deberá invocarse para su ejecución.
La autentificación para la ejecución de procesos es un mecanismo simple y fácil de implementar alternativo a la invocación de servicios SOAP Service.
Para que el registro del token sea efectivo se requiere que el perfil de recursos del usuario sea mínimo, verificándose:
- El usuario debe tener password informada.
- El nivel de seguridad de la password debe ser Alto.
- No debe tener permiso para cambiar la password.
- No debe permitirse ningún intento fallido de login.
- No debe tener permisos para ejecutar roles de aplicación de Axional Studio comprometidos.
- No debe tener permiso de acceso a más de una base de datos.
- No debe tener permiso de acceso a la tool DBStudio.
- No debe tener permiso para ejecutar servicios SOAP.
- Debe tener definido role funcional.
- Debe tener definido role de seguridad SQL.
- Debe tener definido role transaccional.
Habilitar la autentificación de ejecución de procesos en el servidor.
Para disponer del servicio de autentificación de ejecución de procesos el servidor de aplicaciones debe tener definida la válvula de autentificación. En el fichero JAS/conf/server.xml habilitar:
Notas informativa
<!-- ================================================================= Valve to allow N time process execution via tokens SEE wic_conf.wic_user_process_tokens ================================================================ --> <Valve className="deister.webstudio.login.TokenProcessValve" lockedUrl="http://www.yahoo.com" expiredUrl="http://www.bing.com" />
Atributos opcionales para dirigir la respuesta ante incidencias de autentificación:
- errorUrl Habilitar este atributo para dirigir la respuesta en caso de error de autentificación.
- lockedUrl Habilitar este atributo para dirigir la respuesta en caso de que el token se encuentre bloqueado.
- expiredUrl Habilitar este atributo para dirigir la respuesta en caso de que el token se encuentre caducado.
1 webapp.token.process.getNewURL
<webapp.token.process.getNewURL
user='user'
dbms='dbms'
code='code'
token-group='token-group'
>
<expires> !
<timestamp /> !
</expires>
<args> ?
<arg
type='type'
name='name'
> *
<objeto /> !
</arg>
</args>
</webapp.token.process.getNewURL>
Attributes | |||||
---|---|---|---|---|---|
Name | Type | Required | Default | Description | |
Auser | string | Código del usuario. | |||
Adbms | string | Código de la base de datos. | |||
Acode | string | Código de proceso XSQL Script. | |||
Atoken-group | string | Grupo tokens. Es un valor meramente informativo que se registrará en el catálogo de tokens a modo de clasificador. |
Arguments | |||||
---|---|---|---|---|---|
Name | Type | Required | Unique | Nullable | Description |
Eexpires | Fecha de expiración del token. | ||||
Etimestamp | Ejemplo: <date.timestamp dd='31' MM='3' yy='2014' hh='16' mm='00' /> | ||||
Eargs | |||||
Earg | Los argumentos son los parámetros del proceso a ejecutar. | ||||
Atype | string | Tipo del argumento: string|integer|decimal|date|.. Atención los tipos timestamp (datetime) no están soportados en esta versión, aunque pueden utilizarse si se ajustan de forma manual los argumentos en el registro. | |||
Aname | string | Nombre de la variable. | |||
Eobjeto | Valor del argumento. Si se define nombre de variable mediante el atributo name el valor del argumento es opcional y puede obviarse. |
Returns | |
---|---|
Type | Description |
Objeto | Recibe la respuesta del proceso, por ello puede no devolvder ningún valor o varios o una tabla virtual. |
Exceptions
required attribute 'user' not defined
No se ha especificado el código del usuario.
required attribute 'dbms' not defined
No se ha especificado el código de la base de datos.
required attribute 'code' not defined
No se ha especificado el código del proceso.
required attribute 'token-group' not defined
No se ha especificado el grupo de token.
Ver tambien
Obtiene el token de autentificación de login o proceso.
Cataloga un token para la autentificación de login.
Habilitar o deshabilitar token de login.
Ejemplo de petición de confirmación para la aceptación o rechazo de una tarea.
El siguiente script catalogará y devolverá la url para que el usuario pueda aceptar o rechazar la petición.
<xsql-script name='get_token_process_response'> <body> <println> <webapp.token.process.getNewURL user='fcm' dbms='demo_sports' code='demo_token_process_response' token-group='DEMO'> <expires><date.timestamp dd='31' MM='3' yy='2014' hh='16' mm='00' /></expires> <args> <arg type='string'>Confirmation Test</arg> <arg type='boolean' name='RESPONSE' /> </args> </webapp.token.process.getNewURL> </println> </body> </xsql-script>
Output :
http://www.mydeister.com/servlet/jdbs_run/call?ptoken=BC8BDEDA4997FED6EDAF06913E0FADACADE95E8F97789B5F2243FDA6F6D89D7931CCE747A1E889E89562159BC81F92D5BD684A8C17DF19525AA735893698C96F&RESPONSE=
Valor registrado en XSQL Arguments (wic_conf:wic_user_token_process.token_xsql_args):
Confirmation Test|${RESPONSE}
Valor registrado en Arguments Type (wic_conf:wic_user_token_process.token_xsql_type):
1|16
Código de ejemplo que puede catalogar en el repositorio de programas XSQL para poder evaluar el test:
<xsql-script name="demo_token_process_response"> <args> <arg name='p_comment' type='string' /> <arg name='p_response' type='boolean' /> </args> <body> <!-- ========================================================================== --> <!-- Resultados en tabla virtual v_efectos_anticipo --> <!-- ========================================================================== --> <if> <expr><p_response/></expr> <then> <set name='m_txt_response'>ACCEPTED.</set> </then> <else> <set name='m_txt_response'>REJECTED.</set> </else> </if> <!-- ========================================================================== --> <!-- Resultados en tabla virtual v_efectos_anticipo --> <!-- ========================================================================== --> <vtable name='v_type_test'> <column name='comment' type='string' /> <column name='response' type='string' /> </vtable> <vtable.insert name='v_type_test'> <p_comment/> <m_txt_response/> </vtable.insert> <!-- ========================================================================== --> <!-- Se bloquea el token --> <!-- ========================================================================== --> <set name='m_token'><webapp.token.getSessionToken /></set> <if> <expr><isnull><m_token/></isnull></expr> <then> <exception>Token de proceso inexistente para la sesión del usuario [<system.user.getCode/>].</exception> </then> </if> <webapp.token.process.setEnabled token='#m_token' enabled='false' /> <!-- ========================================================================== --> <!-- Respuesta VTABLE --> <!-- ========================================================================== --> <return><v_type_test/></return> </body> </xsql-script>
Modifique la url devuelta por el proceso que generó el hash, asignando las constantes que sean de su interés sobre las variables. En este ejemplo se preparan dos url con la misma base para cada una de las dos situaciones planteadas, ofreciendo al usuario las opciones posibles para aceptar y rechazar:
URL para aceptación: http://SPIDER:100/servlet/jdbs_run/call?ptoken=BC8BDEDA4997FED6EDAF06913E0FADACADE95E8F97789B5F2243FDA6F6D89D7931CCE747A1E889E89562159BC81F92D5BD684A8C17DF19525AA735893698C96F&RESPONSE=true URL para rechazo: http://SPIDER:100/servlet/jdbs_run/call?ptoken=BC8BDEDA4997FED6EDAF06913E0FADACADE95E8F97789B5F2243FDA6F6D89D7931CCE747A1E889E89562159BC81F92D5BD684A8C17DF19525AA735893698C96F&RESPONSE=false
El token de proceso se bloqueará una vez el usuario haya escogido una de las dos opciones.
La decisión de bloquear el token debe decidirla el implantador y como en este ejemplo realizarla desde el código del proceso mediante la llamada a la función webapp.token.process.setEnabled, según:
<set name='m_token'><webapp.token.getSessionToken /></set> <webapp.token.process.setEnabled token='#m_token' enabled='false' />
Calcula el valor hash, lo registra en la tabla de tokens de procesos (wic_conf:wic_user_token_process) y devuelve la url que deberá utilizarse para su ejecución y presentación en formato html.
<xsql-script name='getTokenProcessURL'> <body> <println> <webapp.token.process.getNewURL user='demo' dbms='demo_sports' code='cefectos_anticipo' token-group='DEMO'> <expires><date.timestamp dd='31' MM='3' yy='2014' hh='16' mm='00' /></expires> <args> <arg type='string'>P</arg> <!-- Clase de cartera --> <arg type='string'>A00001</arg> <!-- Tercero --> <arg type='string'>=</arg> <!-- Cuenta --> <arg type='date'>03-04-2014</arg> <!-- Fecha --> <arg type='date'><null/></arg> <!-- Fecha de vencimiento --> <arg type='string'>=</arg> <!-- Justificante --> <arg type='string'>DOCTEST</arg> <!-- Documento --> <arg type='string'>0</arg> <!-- Empresa --> <arg type='string'>ACMBCN</arg> <!-- Proyectom contable --> <arg type='string'>ADM01</arg> <!-- Sección contable --> <arg type='string'>CH</arg> <!-- Tipo de efecto --> <arg type='string'><null/></arg> <!-- Estado efecto positivo --> <arg type='string'><null/></arg> <!-- Estado efecto negativo --> <arg type='string'>A</arg> <!-- Sistema contable --> <arg type='string'>EUR</arg> <!-- Moneda --> <arg type='decimal'><null/></arg> <!-- Cambio --> <arg type='decimal'>123456,78</arg> <!-- Importe --> <arg type='string'><null/></arg> <!-- Perceptor --> <arg type='string'><null/></arg> <!-- Número de domiciliación bancaria --> <arg type='string'>ANTICIPO</arg> <!-- Auxiliar --> </args> </webapp.token.process.getNewURL> </println> </body> </xsql-script>
Output :
http://www.mydeister.com/servlet/jdbs_run/call?ptoken=5BA4D28D75E71CF68E50739BF901C174D840FF96493D9A9CB54DF66DF28772BD2D17D2BDD8A461914507C2EEEE9241C62DF3B74B85FC1D0AC2C99D2D642EE2D9
Valor registrado en XSQL Arguments (wic_conf:wic_user_token_process.token_xsql_args):
P|A00001|=|03-04-2014||=|DOCTEST|0|ACMBCN|ADM01|CH|||A|EUR||123456,78|||ANTICIPO
Valor registrado en Arguments Type (wic_conf:wic_user_token_process.token_xsql_type):
1|1|1|91|91|1|1|1|1|1|1|1|1|1|1|3|3|1|1|1