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

15

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 estoy construyendo actualmente usando la versión 3.3 de la API de Javascript de ArcGIS) que permite al usuario ver esos servicios web seguros:

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

Mi voluntad es no pedir al usuario que solicite CADA autenticación del servicio de mapas porque ya sé que TODOS los servicios de mapas le pertenecen a él / ella y, por lo tanto, son accesibles por él / ella con el mismo nombre de usuario y contraseña. En mi idea, la solicitud de credenciales debería aparecer solo UNA VEZ y, por lo tanto, el código JS debería enviar 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. Para mí, no parece que la API REST de ArcGIS Server esté proporcionando tal llamada ... tal vez me equivoque.

¿Por lo tanto, esta forma "REST" para iniciar sesión en los servicios de mapas seguros es factible con ArcGIS Server (lo que hace posible el acceso programático a los servicios seguros)? Si es así, ¿puede alguno de ustedes proporcionar ejemplos o enlaces a recursos web que expliquen esto?

    
pregunta csparpa 29.01.2013 - 12:36

4 respuestas

10

Finalmente encontré lo que estaba buscando: un punto final de ArcGIS Server adecuado que podría usar 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 al cuerpo de la respuesta HTTP, y uno puede enviarlo a cualquier solicitud adicional a recursos seguros sin que se le pidan credenciales nuevamente. El token debe ser el valor para el encabezado de solicitud Cookie , ya que actualmente se almacena en una cookie en el lado del cliente.

But...damn ! Este generador de tokens es NO parte de la API REST de ArcGIS Server. ¡No pude encontrarlo en la documentación de la API en línea ! ¿Dónde en el mundo podría encontrarlo?

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

En el ejemplo, si tenemos este servicio de mapas expuesto bajo la API REST de ArcGIS: /arcgis/rest/services/myDir/myMapService/MapServer/layers e intentamos obtener este recurso, lo que obtenemos de ArcGIS Server es una respuesta que tiene un código de estado 200: OK y un documento HTML en El cuerpo (el HTML es un formulario de inicio de sesión). Desde un inicio de sesión que podría ser RESTful, esperaría que la solicitud me devolviera un código de estado 401: Authentication Required junto con un encabezado WWW-Authenticate ... Probé todo esto por mí mismo utilizando un programa cliente REST.

    
respondido por el csparpa 31.01.2013 - 16:41
7

Por favor, eche un vistazo a Cómo funciona ArcGIS Server Security.

Básicamente, deberá crear usuarios y grupos, y otorgar derechos de usuario particulares sobre ciertos servicios.

Una vez que haya hecho eso, deberá usar la seguridad basada en token en su aplicación JavaScript. Lo que esto significa es que, le pide al usuario su nombre de usuario y amp; contraseña. Se envía al servidor de ArcGIS, que valida las credenciales y envía un token. Este token se usa para validar al usuario cuando se solicita un recurso.

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

Esta página detalla cómo usar Servicios Basados en Token .

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

Aquí hay un par de ejemplos sobre cómo usar el administrador de identidad.

    
respondido por el Devdatta Tengshe 29.01.2013 - 15:58
3

En la API de ArcGIS para JavaScript, hay un widget llamado Identity Manager que aborda exactamente lo que quieres hacer. Consulte muestras que usan el administrador de identidad para ver cómo funciona .

La muestra vinculada por Devdatta, aunque es válida, es la forma de hacerlo de Pre-Identity Manager e implica mucho más código que es necesario ahora que la autenticación para los servicios seguros está integrada en la API.

    
respondido por el Derek Swingley 29.01.2013 - 16:15
2

También puede usar Proxy, por lo que su aplicación nunca solicitará el nombre de usuario y la contraseña. Y no es necesario que configure Token para acceder a los servicios protegidos cuando los esté accediendo. Lo único que debe hacer es en su archivo JS, configurar lo siguiente:        esriConfig.defaults.io.proxyUrl="/proxy.ashx"; (por ejemplo, enlace ;        esriConfig.defaults.io.alwaysUseProxy = true; Y en su archivo proxy.config, provea todos los servicios que consume en su aplicación.
Consulte enlace para obtener más detalles sobre el proxy. Como desee autenticación basada en token, en su archivo proxy.config, debe agregar solo la URL, el nombre de usuario, la contraseña y el contenido de MatchAll.

    
respondido por el Mayur Patel 07.12.2017 - 16:05