Acceso a documentos sin login en Microstrategy

Todos sabemos que, cuando trabajamos con Microstrategy, para poder acceder a un informe, documento o tablero en concreto, aunque se haga a través de su URL directa, se necesita un user/passwd que nos autentique frente al sistema. Al hilo de esto, en ocasiones puede que necesitemos montar un demo de dashboard para un algún cliente o para alguna conferencia y puede que nos sea útil poder acceder al tablero sin necesidad de tener que conocer los datos de autenticación.

Como os comentaba, el objetivo de esta pequeña guía es intentar acceder a un determinado documento / informe sin que el usuario final necesite introducir los datos de autenticado. Nos servirá para poder hacer demos publicas de nuestro trabajo. La manera mas sencilla de hacer en esto en Microstrategy sería:

urlMicrostrategyDoc

  1. Ir a Microstrategy Web
  2. Navegar hasta el documento elegido
  3. Botón derecho sobre él y seleccionamos Propiedades.
  4. Copiamos la URL que aparece y le añadimos USUARIO y PASSWORD al final de la cadena.
  5. Con esta URL, si la lanzamos desde un navegador, podríamos acceder sin problemas a nuestro documento

El problema que nos plantea esta manera de hacerlo es que los datos de autenticado quedan totalmente al descubierto con la brecha de seguridad que esto presenta. Vamos a ver como lo solventamos.

Task Administrator

Antes de nada, presentaros el Task Administrator de Microstrategy. La URL para a este servicio es

http://localhost/Microstrategy/asp/TaskAdmin.aspx?pg=hometaskAdmin

Este Task Administrator es una forma de acercarnos de manera sencilla a la API Web y nos permitirá lanzar algunos de los Web Services que Microstrategy posee. Task Administrator es un componente gratuito de Microstrategy y no requiere una licencia especial para su instalación o uso, que en general se basa en invocar la función deseada con los parámetros necesitados y recoger el dato que devuelve el sistema. Y en esta linea, se encuentra nuestro desarrollo.

La función getSessionState sirve  para generar un identificador único de la sesión, a partir del cual, el usuario que accede puede entrar en Microstrategy. Voy a detallar los parámetros básicos de la función:

  • server. Es el nombre de nuestro servidor de Microstrategy
  • project. Proyecto al que pertenece el documento al que queremos acceder
  • uid. Usuario que debe tener permiso para ver el proyecto
  • pwd. Contraseña del usuario
  • displayLID / dataLID / metadataLID / warehouseDataLID. (opcionales) Todos ellos hacen referencia a la información de localización del documento/warehouse y, en ocasiones, son muy importantes, como luego veremos.

La manera más rápida de ver esto funcionando es generar una URL con estos parámetros.

Arriba, en Task Envelope y Task Content Type, seleccionamos XML. Después, rellenamos, al menos, server, project, uid y pwd, marcamos la columna Include? y pulsamos el botón Update URL. El sistema habrá generado una URL similar a esta

http://locahost/Microstrategy/asp/TaskAdmin.aspx?taskId=getSessionState&taskEnv=xml&taskContentType=xml&server=SERVIDOR&project=PROYECTO&uid=USER&pwd=PASSWD

Con esta URL generada, si pulsamos sobre Invoke URL, obtendremos el identificador único de la sesión, localizado entre las etiquetas <min-state></min-state>

getSessionID

Bien, este id de sesión nos sirve para enmascarar los datos de autenticado y que, por tanto, sea completamente transparente al usuario final. Este código, podriamos copiarlo en nuestra URL anterior sustituyéndolo por los datos de uid y pwd. Quedaría de esta forma

y con él, podríamos acceder durante unos minutos, dependiendo de la duración de la sesión Web configurada en el Intelligence Server, a nuestro documento sin necesidad de introducir los datos de acceso.

Evidentemente, una vez aquí, lo que nos interesa es poder crear un método que nos permita lanzar esta función getSessionState cada vez que un usuario acceda al documento. Y es aquí donde entra en juego la función que hemos desarrollado.

Código definitivo

Para poder llamar dinámicamente a la función getSessionState cada vez que un usuario quiera acceder a un documento en concreto, lo que hemos desarrollado es un aspx y un aspx.vb que contiene la función principal.

  • index.aspx
    login1
  • index.aspx.vb
    Esta es la función principal, donde llamamos al getSessionState y recogemos el valor devuelto. Hay varias variables a editar:
    • Const url As String. Debemos introducir la URL para llamar al getSessionState del TaskAdmin, adaptada a nuestro servidor de Microstrategy, indicando server, project, user y password
    • Response.Redirect (url). Aquí introduciremos la URL de nuestro documento, respetando la parte final correspondiente al ID de sesión que nos devolverá la función.

login2

Descarga: index_aspx.rar

Finalmente, subimos ambos ficheros a una carpeta dentro de nuestro servidor de Microstrategy (varía si es Tomcat o IIS). El fichero index.aspx será el que tienes que pasar como link al usuario final

 Posibles errores

En la realización de la función me he encontrado con un error de Microstrategy al intentar entrar de manera directa en los documentos. El error es el siguiente

getSessionState_error

Si recordáis, arriba os comentaba la importancia, en algunas ocasiones, de los parámetros displayLID, dataLID, metadataLID, warehouseDataLID. Pues bien, en este caso, el error que nos está dando hace referencia a la localización de los documentos / warehouse. Por algún motivo Microstrategy no es capaz de resolver, al entrar de esta manera, la localización y por tanto salta el error.

Para corregirlo basta marcar en el paso de generación de URL, las cuatro variables y darles un valor, que en nuestro caso, castellano, es el 3082. De esta manera la URL generada tendra estas cuatro nuevas variables que pasará a la función getSessionState evitando el error.

Espero que os haya parecido interesante y sobretodo que os sea de utilidad. Podéis dejar vuestros comentarios y/o dudas, estaré encantado de resolverlas 😉 

Sergio Martín
Más de seis años de experiencia gestionando equipos y proyectos de Business Intelligence para diferentes sectores, apasionado de todos los procesos técnicos relacionados con la gestión de la información, el tratamiento de datos y la automatización de procesos

** Microstrategy 9.4 | Pentaho 5 (ETL) | Oracle 11g **

5 comments

  1. Hi Sergio,

    Thanks for the post. I followed the steps mentioned but I am getting a “There was a problem retrieving data” error when I click on Invoke Url button in Task Administrator.

    Any idea?

    Thanks & Regards,
    Rama.

  2. Thank you Sergio for this post. I am trying to display all the projects connected on the “about page.aspx” based on a link/button click “show projects” and I want to pass session state​ to the task that retrieves the projects and uses the old session of user logged in.

    My custom task name : connectedprojectstask

    I came across this KB and now I would like to add sessionstate as well so that I can reuse the same session based on ‘n’ number of clicks.
    I have added the below html code to the page. Can you please help me how can I add the session state via “getsessionstate” task to the above click button?

    https://community.microstrategy.com/s/article/KB40208-How-to-Trigger-a-MicroStrategy-Task-using-the

    ********** code***********************

    <input onclick="showprojects('./TaskAdmn.aspx?taskId=connectedprojectstask&projectID=&ServerList=taskContentType=html&taskEnv=html’);return false;” type=”submit” value=”show projects=”mstrButton” name=”showprojects” id=”showprojects”/>

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *