16 votos

Autenticación programática en capas seguras de ArcGIS Server a través de la API RESTful

Tengo una instancia de ArcGIS 10.1 Server que expone servicios de mapas seguros en Internet. Mi necesidad es codificar una aplicación cliente (que actualmente estoy construyendo utilizando la versión 3.3 de la API de ArcGIS Javascript) que permita al usuario ver esos servicios web seguros:

Creo que este ejemplo de ESRI en línea es un buen comienzo.

Mi voluntad es que no se pida al usuario la autenticación de CADA servicio de mapas porque ya sé que TODOS los servicios de mapas le pertenecen y por lo tanto son accesibles por él bajo el mismo nombre de usuario y contraseña. En mi idea, la solicitud de credenciales debería aparecer sólo una vez y por lo tanto el código JS debería alimentar las credenciales a cada uno de los servicios de mapas a través de algún tipo de llamada de inicio de sesión RESTful. A mí no me parece que la API REST de ArcGIS Server proporcione una llamada de este tipo... quizá me equivoque.

¿Es, por tanto, factible esta forma "RESTful" de acceder a mapservices seguros con ArcGIS Server (haciendo posible el acceso a servicios seguros de forma programática)? Si es así, ¿alguno de ustedes puede proporcionar ejemplos o enlaces a recursos web que lo expliquen?

0 votos

Por favor, indíquenos la versión de ArcGIS GIS Server (10.0 O 10.1) ?

0 votos

Sunil, me olvidé de escribirlo, ¡es 10.1!

1 votos

¿está utilizando arcgis security store y no windows auth?

11voto

Anderson Imes Puntos 18093

Por fin he encontrado lo que buscaba: un punto final web adecuado de ArcGIS Server que podía utilizar para generar tokens.

La llamada es esta:

GET http://<arcgisserver_host:port>/arcgis/tokens?request=getToken&username=<usr>&password=<usr>&expiration=<token_lifespan>

que devuelve el token en el cuerpo de la respuesta HTTP, y uno puede enviarlo junto a cualquier otra solicitud de recursos seguros sin que se le pidan las credenciales de nuevo. El token debe ser el valor de la etiqueta Cookie ya que actualmente se almacena en una cookie en el lado del cliente.

Pero... maldito ¡! Este generador de fichas es NO ¡¡parte de la API REST de ArcGIS Server!! No he podido encontrarlo en el documentación de la API en línea ¡! ¿En qué lugar del mundo podría encontrarlo?

Esto significa que ArcGIS Server no tiene un marco de autenticación RESTful.

Por ejemplo, si tenemos este mapservice expuesto bajo la API REST de ArcGIS: /arcgis/rest/services/myDir/myMapService/MapServer/layers y tratamos de obtener este recurso, lo que obtenemos de ArcGIS Server es una respuesta con un 200: OK y un documento HTML en el cuerpo (el HTML es un formulario de acceso). De un inicio de sesión supuestamente RESTful, esperaría que la solicitud me devolviera un 401: Authentication Required junto con un código de estado WWW-Authenticate cabeza... Yo mismo he probado todo esto utilizando un programa cliente REST.

3 votos

Lamentablemente la mayoría de las implementaciones "RESTful" no son RESTful :) Hace algunos años renuncié a ser súper estricto con esto porque la verdad es que la mayoría de las implementaciones son "RESTful". Para tu caso de uso particular, suelo tomar un enfoque diferente. Yo uso el sistema de autenticación incorporado de elección y proxy abrir las solicitudes de ArcGIS. Así que si yo estaba manejando la autenticación con Django autenticación, o de rubí, o .net o lo que sea, yo uso ese sistema. Entonces, cuando ese sistema dice que está bien, puede proxy de las solicitudes a un servidor de ArcGIS interna / puerto que está bloqueado fom el mundo exterior.

2 votos

Hola @Ragi Yaser Burhum, tienes razón: nunca viviremos en un mundo completamente RESTful ;-) Yo también me planteé un enfoque como el tuyo: Me gusta la idea de tener un proxy (que también podría manejar las solicitudes a los servicios web que no sean de ArcGIS Server, también), pero estoy en la necesidad de mantener la complejidad de toda la arquitectura lo más bajo posible. Así que, después de descubrir que hay una forma directa de autenticar programáticamente a los usuarios a los servicios de mapas, ¡lo haré! ¡Gracias de todos modos!

0 votos

Tal vez esta es una pregunta demasiado vieja, pero espero que puedas ver que la API REST de Esri ahora tiene el método GenerateToken: resources.arcgis.com/es/help/arcgis-rest-api/index.html#//

7voto

Anthony Cramp Puntos 126

Por favor, eche un vistazo a Cómo funciona la seguridad de ArcGIS Server.

Básicamente, tendrá que crear usuarios y grupos, y dar a un usuario particular derechos sobre ciertos servicios.

Una vez que haya hecho eso, entonces usted necesita utilizar la seguridad basada en tokens en su aplicación JavaScript. Esto significa que se le pide al usuario su nombre de usuario y contraseña. Esto se envía al servidor de ArcGIS, que valida las credenciales y devuelve un token. Este token se utiliza para validar al usuario cada vez que se solicita un recurso.

Usted, como programador, enviará este token a cada servicio de mapas, servicio de consulta, etc.

En esta página se explica cómo utilizar Servicios basados en tokens .

La API Javascript de ArcGIS ya viene con una clase, la IdentityManager para hacer esto.

Aquí hay un un par de muestras sobre cómo utilizar el Gestor de identidades.

3voto

Daniel Broekman Puntos 1951

En la API de ArcGIS para JavaScript, hay un widget llamado Gestor de identidades que aborda exactamente lo que quieres hacer. Consulte muestras que utilizan el gestor de identidades para ver cómo funciona.

El ejemplo enlazado por Devdatta, aunque es válido, es la forma de hacer esto antes del Gestor de Identidades e implica mucho más código que es necesario ahora que la autenticación para los servicios seguros está incorporada en la API.

1 votos

Acababa de tomar el enlace de muestra de la documentación de ESRI. ¿Se puede actualizar la documentación para que apunte a las nuevas muestras?

2 votos

Amigos, gracias por vuestros consejos pero creo que no habéis entendido lo que quería decir. El escenario es: mi usuario va a acceder a N servicios de mapas seguros, lo que significa que va a ser molestado N veces con una solicitud de inicio de sesión. Dado que se puede acceder a TODOS los mapservices del usuario usando las mismas credenciales, me gustaría que mi aplicación las pidiera SOLO UNA VEZ y luego las usara para autenticar automáticamente cada mapservice. En esta etapa, supongo que debería usar un proxy para gestionar la autentificación de múltiples servicios de mapas con ArcGIS Server. ¿Suena bien? ¿Alguna alternativa más sencilla? Gracias de antemano, espero haber aclarado mis necesidades.

2voto

netoarmando Puntos 326

También puede utilizar el Proxy, para que su aplicación nunca le pida el nombre de usuario y la contraseña. Y no es necesario establecer un Token para acceder a los servicios seguros siempre que se acceda a ellos. Lo único que necesita hacer es en su archivo JS, establecer lo siguiente esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (ej., http://localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = true; Y en su archivo proxy.config, proporcione todos los servicios que está consumiendo en su aplicación.
Consulte https://github.com/Esri/resource-proxy/ para obtener más detalles sobre el poder. Como quieres una autenticación basada en tokens, en tu archivo proxy.config, necesitas añadir url, nombre de usuario, contraseña y contenido matchAll solamente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X