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 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 que no se solicite al usuario CADA autenticación de servicio de mapas porque ya sé que TODOS los servicios de mapas pertenecen a él / ella y, por lo tanto, son accesibles para é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 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. Para mí, no parece que la API REST de ArcGIS Server esté proporcionando esa llamada ... tal vez estoy equivocado.
¿Es por lo tanto esta forma "RESTful" de iniciar sesión en servicios de mapas seguros factible con ArcGIS Server (haciendo posible acceder a servicios seguros mediante programación)? Si es así, ¿alguno de ustedes puede proporcionar ejemplos o enlaces a recursos web que expliquen esto?
Respuestas:
Finalmente encontré lo que estaba buscando: un punto final web de ArcGIS Server adecuado que pudiera usar para generar tokens.
La llamada es esta:
que devuelve el token al cuerpo de respuesta HTTP, y uno puede enviarlo a cualquier solicitud adicional a recursos seguros sin que se le soliciten nuevamente las credenciales. El token debe ser el valor para el
Cookie
encabezado de la solicitud, ya que actualmente está almacenado en una cookie en el lado del cliente.Pero ... maldición ! ¡Este generador de tokens NO forma 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.
Por 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 un200: OK
código de estado y un documento HTML en el cuerpo (el HTML es un formulario de inicio de sesión ) Desde un posible inicio de sesión RESTful, esperaría que la solicitud me devolviera un401: Authentication Required
código de estado junto con unWWW-Authenticate
encabezado ... Probé todo esto yo mismo usando un programa cliente REST.fuente
Observe 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, debe usar la seguridad basada en tokens en su aplicación de JavaScript. Lo que esto significa es que le pide al usuario su nombre de usuario y contraseña. Eso se envía al servidor ArcGIS, que valida las credenciales y devuelve un token. Este token se usa para validar al usuario cada vez que se solicita un recurso.
Usted, como programador, enviará este token a cada servicio de mapas, servicio de consultas, etc.
Esta página detalla cómo usar los servicios basados en tokens .
ArcGIS Javascript API ya viene con una clase, el IdentityManager para hacer esto.
Aquí hay un par de ejemplos sobre cómo usar Identity Manager.
fuente
En la API de ArcGIS para JavaScript, hay un widget llamado Identity Manager que aborda exactamente lo que desea hacer. Echa un vistazo a las muestras que usan el administrador de identidad para ver cómo funciona.
La muestra vinculada por Devdatta, si bien es válida, es la forma previa a Identity Manager de hacer esto e involucra mucho más código que es necesario ahora que la autenticación para servicios seguros está integrada en la API.
fuente
También puede usar Proxy, por lo que su aplicación nunca solicitará Nombre de usuario y Contraseña. Y no necesita configurar Token para acceder a servicios seguros siempre que acceda a ellos. Lo único que debe hacer es en su archivo JS, configure lo siguiente: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (por ejemplo, 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 proxy. Como desea la autenticación basada en token, en su archivo proxy.config, debe agregar url, nombre de usuario, contraseña y solo coincidir con todo el contenido.
fuente