Tokens y servicios de token
Un token se utiliza cuando la seguridad de ArcGIS Server se configura en la opción Autenticación administrada por ArcGIS. Un token representa la identidad de un usuario para un servicio Web de ArcGIS. Un servicio de token, que es un servicio Web, emite un token para una aplicación de cliente. Una aplicación de cliente debe proporcionar un token válido a un servicio Web de ArcGIS protegido para acceder a él.
Autenticación administrada por ArcGIS basada en tokens
La siguiente secuencia de eventos se produce siempre que una aplicación del cliente intenta acceder a un servicio Web de ArcGIS protegido:
- El cliente realiza una solicitud a un servicio Web de ArcGIS protegido.
- El servicio Web de ArcGIS informa que se requiere un token y brinda la URL del servicio de token.
- El cliente solicita un token al servicio de token al proporcionar un nombre de usuario y una contraseña válidos.
- El servicio de token valida el nombre de usuario y la contraseña y, si son válidos, devuelve un token al cliente.
- El cliente realiza una solicitud al servicio Web de ArcGIS protegido e incluye el token junto con la solicitud.
- El servicio ArcGIS valida el token, luego devuelve al cliente la respuesta para la solicitud del servicio.
Consumir servicios SIG protegidos mediante tokens
Cuando se habilita el servicio de token y éste es requerido para acceder a los servicios Web de ArcGIS, el software cliente debe ser capaz de obtener y utilizar el token, como en el proceso que se describe arriba. Las aplicaciones del cliente de ESRI, como ArcGIS Desktop, gestionan automáticamente el proceso de adquisición de tokens del servicio de token y la presentación de los tokens al servicio Web de ArcGIS protegido. A continuación se describe el comportamiento de los clientes de ArcGIS cuando se conectan a un servicio de Internet de ArcGIS Server que requiere la autenticación basada en token.
ArcGIS Desktop (ArcMap, ArcCatalog): El usuario introduce un nombre de usuario y una contraseña válidos en el cuadro de diálogo de la conexión. Si no introduce ningún nombre de usuario o contraseña o si el inicio de sesión es incorrecto, el software solicita al usuario que introduzca las credenciales correctas. Una vez que se introduce un nombre de usuario y una contraseña correctos, el usuario puede utilizar el servicio normalmente.
ArcGIS Explorer: Mismo comportamiento que con ArcGIS Desktop.
Aplicaciones ADF Web (ambas Java y Microsoft .NET Framework): La aplicación Web utiliza las credenciales introducidas anteriormente en el Administrador o en el entorno del desarrollador. En el Administrador, el nombre de usuario y la contraseña se introducen cuando se agrega el servidor SIG durante la creación de una aplicación Web. En un entorno del desarrollador, como Microsoft Visual Studio, el nombre de usuario y la contraseña se introducen cuando se agrega el recurso SIG a la aplicación.
Aplicaciones de JavaScript (API de ArcGIS para JavaScript, extensión de ArcGIS para el API de Google Maps, extensión de ArcGIS para Bing Maps y otras aplicaciones basadas en REST): El cliente debe ser capaz de proporcionar un token para acceder al servicio que requiere un token. En la mayoría de los casos, no será apropiado incorporar el nombre de usuario y la contraseña para el servicio en el JavaScript de cliente. En cambio, un token de larga duración se puede obtener desde el servidor de token y este token se puede incluir en la página del cliente. Entonces, el token se incluye en la solicitud del servicio. Para obtener detalles sobre la adquisición de un token, consulte la página Web GetToken. Para obtener información sobre la solicitud de un recurso con un token, consulte la ayuda API correspondiente.
Aplicaciones basadas en SOAP: Las aplicaciones que utilizan un kit de herramientas SOAP para acceder al WSDL del servicio Web de SIG, sin utilizar las clases de conexión ADF, deben adquirir y utilizar los tokens de manera explícita. Consulte la ayuda del desarrollador de ArcGIS Server para obtener información y ejemplos.
En las aplicaciones Web, el usuario final de la aplicación no introduce credenciales para acceder al servicio de ArcGIS en el navegador. Las credenciales para acceder al servicio Web de ArcGIS se especifican cuando se construye la aplicación Web en el Administrador de ArcGIS Server o Eclipse/NetBeans IDE. Esta credencial se utiliza para todos los usuarios de la aplicación Web. La aplicación Web se puede proteger para requerir un inicio de sesión pero este inicio de sesión se valida en forma separada. La seguridad del nivel de la aplicación Web se puede configurar mediante el Administrador de ArcGIS Server. Si utiliza programación personalizada, es posible pasar las credenciales desde el usuario final hacia el servicio ArcGIS Web. Consulte la ayuda del desarrollador de ArcGIS Web para obtener más información.
Configurar un servicio de token
Un servicio de token es un servicio Web que se instala como parte de ArcGIS Server. Se comunica con los almacenamientos principales y de seguridad que mantienen la información de usuario y de rol para autenticar las solicitudes de tokens entrantes. Una vez que se autentican las credenciales de usuario, se emite un token y se puede utilizar para consumir un servicio Web de ArcGIS protegido.
Antes de comenzar un servicio de token en la instancia de ArcGIS Server, debe configurarlo. Para configurar un servicio de token, debe navegar a la página Configuración en el panel Seguridad en el administrador y hacer clic en la pestaña Seguridad para los servicios SIG. Elija la opción Autenticación del servicio de token de ArcGIS y haga clic en Configurar para configurar y comenzar un servicio de token en la instancia de ArcGIS Server.
Para obtener más información sobre los valores de inactividad de token y claves compartidas, consulte "Tiempo de espera de tokens" y "Clave compartida para el servicio de token" a continuación.
Se requiere conexión segura (HTTPS/SSL) para el servicio de token
Por defecto, se requiere una conexión segura que utilice HTTPS (Capa de sockets seguros o SSL) cuando se solicita un token al servicio de token. HTTPS cifra el nombre de usuario y la contraseña durante la transmisión. El cliente debe utilizar HTTPS cuando solicite un token, ya sea a través del uso del método estándar donde se incluye el nombre de usuario y la contraseña en la cadena de caracteres de consulta (utilizada por ArcGIS Desktop, los controles Web ADF y otros clientes), o a través de la página Web GetToken.html.
Sólo para fines de evaluación internos, se puede deshabilitar el requisito de HTTPS, para que se puedan obtener tokens mediante HTTP no protegidos. Tenga en cuenta que las contraseñas enviadas mediante HTTP pueden ser interceptadas por cualquier persona que se conecte a la red.
Tiempo de espera de tokens
Cuando el servicio de token está habilitado, puede establecer el tiempo de espera del token en el administrador; para ello, navegue a la página Configuración en el panel Seguridad y haga clic en Configurar en la pestaña Seguridad para los servicios SIG. Para mantener la seguridad del token, cada token está asociado con una fecha de expiración. El usuario final puede ver un mensaje de error de tiempo de espera o de otro error si utiliza un token que expiró.
Los tokens con fechas de expiración más cortas son más seguros, ya que un token comprometido sólo se puede utilizar dentro de una ventana de tiempo más pequeña. Sin embargo, una fecha de expiración corta significaría que las aplicaciones tengan que reciclar tokens con mayor frecuencia, lo que agrega una sobrecarga.
El servicio de token instalado con ArcGIS Server requiere que proporcione dos fechas de expiración durante la configuración:
Fecha de expiración corta (fecha de expiración predeterminada)
El servicio de token emite un token con una fecha de expiración corta cuando el cliente no especifica un valor de tiempo de espera o proporciona un identificador del cliente cuando solicita un token.
Los clientes de ArcGIS Desktop y las aplicaciones ADF Web utilizan tokens con fechas de expiración cortas mientras consumen servicios Web de ArcGIS protegidos.
Fecha de expiración larga (fecha de expiración predeterminada)
Esta es la fecha de expiración máxima que puede emitir el servicio de token. Todas las solicitudes de token que especifican una fecha de expiración para los tokens cuando se realiza la solicitud deben proporcionar un Id. de cliente. Cuando se proporciona un Id. de cliente, el cliente puede solicitar un token con una fecha de expiración entre un minuto y la fecha de expiración larga (fecha de expiración máxima). Una solicitud de un token con una fecha de expiración más larga que el máximo resultará en un error.
Los desarrolladores de JavaScript que deseen consumir servicios protegidos pueden solicitar un token con una fecha de expiración específica mediante el uso de la página Web GetToken.
Para obtener más información sobre cómo solicitar tokens, consulte "Solicitar tokens" a continuación.
Clave compartida para el servicio de token
La clave compartida para el servicio de token se utiliza para cifrar el token. El token se cifra con el nombre de usuario y otra información y se envía al cliente. Cuando el cliente envía una solicitud de un servicio Web de ArcGIS, incluye el token. El servidor utiliza entonces la clave para descifrar el token. El servidor verifica la identidad del cliente antes de permitirle el acceso al servicio Web de ArcGIS. La clave compartida asegura que el servidor cree el token.
Debido a que la clave es fundamental para asegurar la identidad y autorización del cliente, debe configurarse con un valor único y con la longitud correcta. Para configurar la clave compartida, navegue a la página Configuración en el panel Seguridad y haga clic en Configurar en la pestaña Seguridad para los servicios SIG. En el cuadro de diálogo Configure el servicio de token local que aparece, establezca el valor para la propiedad Clave compartida para cifrar token. La clave debe tener 16 caracteres (si tiene menos de 16, no se usará). Se recomienda utilizar un conjunto de caracteres aleatorios para la clave. Se puede utilizar cualquier carácter, incluidos los caracteres que no son alfanuméricos. La clave debe configurarse con un valor que no sea fácil de descifrar, en caso de que alguna persona intercepte un token. Debido a que no es necesario que los usuarios utilicen o recuerden la clave, la complejidad de la clave no representa los mismos problemas que con las contraseñas.
El token se cifra con la clave a través del método de cifrado conocido como Estándar de cifrado avanzado (AES), también conocido como Rijndael. Los 16 caracteres de la clave representan los 128 bits utilizados para el cifrado.
Para obtener más información sobre el cifrado y el AES, consulte las referencias de seguridad o a alguna persona en la organización que tenga experiencia en seguridad y criptografía.
Página Web GetToken
Con el servicio de token, se ofrece una página HTML para habilitar las solicitudes manuales de tokens. Generalmente, esto se solicita sólo cuando se construyen aplicaciones Web con el API de ArcGIS Server para JavaScript o para evaluaciones y resolución de problemas. Los clientes como las aplicaciones ADF Web y ArcGIS Desktop recuperan automáticamente los tokens y no necesitan esta página. La página GetToken se ubica en la instancia de ArcGIS Server en https://<servidor web>:<puerto>/arcgis/tokens/gettoken.html (o si ha exportado el servicio de token y lo ha implementado en un servidor Web, sustituya <servidor web> con el nombre del dominio del servidor Web y reemplace arcgis/tokens con la ruta de contexto a la aplicación implementada).
Para utilizar la página GetToken, introduzca la siguiente información:
- Nombre de usuario y contraseña: Las credenciales de usuario que son válidas para los servicios Web de ArcGIS en ArcGIS Server. Los usuarios válidos son aquellos configurados con el Administrador de ArcGIS Server en el panel Configuración.
- Id. de cliente: Un identificador de un equipo que realiza la solicitud al servicio Web. El Id. de cliente es necesario para obtener un token de larga duración que sea válido durante un período de tiempo extendido, por ejemplo, es necesario cuando se utiliza la API de ArcGIS para JavaScript. El Id. de cliente se puede especificar de dos maneras:
- Dirección IP: vincula el token al equipo especificado. Utilice esta opción si el token se utilizará siempre en el equipo especificado, como en una aplicación Web construida con la API de ArcGIS Server para SOAP, donde el servidor realiza solicitudes al servicio Web de ArcGIS. También se puede utilizar este enfoque cuando se realizan evaluaciones y resolución de problemas con ArcGIS Server.
- Sitio de referencia HTTP: Esta es la URL de la página desde la que se realiza la solicitud al servicio Web de ArcGIS. Utilice este enfoque si construye una aplicación con la API de ArcGIS Server para JavaScript u otras aplicaciones basadas en REST, donde los clientes individuales solicitarán mapas y datos directamente al servicio Web de ArcGIS.
- Expiración: La expiración para un token entre un minuto y el máximo.
Formato de solicitud de token
Para obtener un token del servidor, debe hacer una solicitud de URL. Los clientes que trabajan con tokens, como ArcGIS Desktop, ADF Web, API Web, y los clientes móviles utilizan este enfoque, como lo hace la página GetToken descrita en la sección anterior.
Solicitar un token utilizando el extremo del token
Puede solicitar un token utilizando el extremo del token. Por ejemplo, la siguiente URL se puede utilizar para obtener un token de un servidor:
https://myserver.example.com/arcgis/tokens?request=gettoken&username=myuser&password=secret1&clientid=ref.myserver.example.com&expiration=1440&f=json&callback=myfunction
Esta solicitud obtendría un token para el usuario myuser para una aplicación Web que se ejecuta en el mismo servidor (myserver.example.com), con un período de validez de un día (1440 minutos).
En la cadena de caracteres de consulta se pueden especificar los siguientes parámetros:
request: el valor de este parámetro es siempre gettoken (request=gettoken). Requerido.
username: el nombre de usuario para un usuario del sistema. Requerido.
password: la contraseña para el usuario del sistema. Requerido.
Nota:HTTPS/SSL cifra el nombre de usuario y la contraseña durante la transmisión de token. Para obtener más información, consulte la sección Conexión segura (HTTPS/SSL) arriba.
clientid: parámetro opcional que identifica al cliente. Utilice un carácter "." entre el tipo y el valor. Si no se especifica el clientid, el token utilizará una configuración de interrupción de token de corta duración.
Valores:
ip: dirección IP del cliente.
Ejemplo: clientid=ip.10.14.102.85
ref: la URL base de la aplicación Web donde se usará el token. Debe especificar este parámetro si el valor del parámetro del cliente es referrer.
Ejemplo: clientid=ref.http://myserver/mywebapp
requestip: si el valor se especifica como requestip (IP de la solicitud), se generará el token para la IP desde la que se originó la solicitud.
Ejemplo: clientid=requestip
expiration: parámetro opcional que especifica por cuanto tiempo será válido el token según el tiempo dado. El valor está en minutos. Si no se incluye este parámetro, la expiración usa la configuración de la fecha de expiración del token de corta duración.
f: este parámetro opcional, nuevo para ArcGIS Server 10.0 Service Pack 1 (SP1), especifica el formato de salida. Acepta el valor "json" para que devuelva el resultado en un formato json. Si no se especifica este parámetro, el token se generará en un formato de texto.
Ejemplo: {"token":"hjSXkAQl2uczsyE9T3NDvhcso6WVYWSAqBcn1GFB-L8.","expires":"1289513369381"}
El tiempo de expiración está representado en milisegundos a partir del 1 de enero de 1970.
callback: parámetro opcional que especifica el nombre de la función de devolución de llamada. Cuando se incluye la devolución de llamada, la salida siempre se devuelve en formato json.
Solicitar un token utilizando el extremo generateToken
En ArcGIS Server 10.0 Service Pack 1 (SP1), ahora puede solicitar un token utilizando el extremo generateToken. Por ejemplo, la siguiente URL se puede utilizar para obtener un token de un servidor:
https://myserver.example.com/arcgis/tokens/generateToken?username=myuser&password=mypass&client=referer|ip|requestip&referer=referer&ip=ipaddress&expiration=expiration&f=json&callback=myfunction
En la cadena de caracteres de consulta se pueden especificar los siguientes parámetros:
username: el nombre de usuario para el que se genera el token. Requerido.
password: la contraseña para el nombre de usuario. Requerido.
Nota:HTTPS/SSL cifra el nombre de usuario y la contraseña durante la transmisión de token. Para obtener más información, consulte la sección Conexión segura (HTTPS/SSL) arriba.
client: parámetro opcional que identifica al cliente. Si no se especifica el clientid, el token utilizará una configuración de interrupción de token de corta duración.
Valores:
referer: la URL base de la aplicación Web donde se usará el token. Debe especificar este parámetro si el valor del parámetro del cliente es referrer.
Ejemplo: referer=http://myserver/mywebapp
ip: la dirección IP del equipo desde el que se utilizará el token. Este parámetro se debe especificar si el valor del parámetro client es ip.
Ejemplo: ip=10.14.102.85
requestip: si el valor se especifica como requestip (IP de la solicitud), se generará el token para la IP desde la que se originó la solicitud.
expiration: parámetro opcional que especifica por cuanto tiempo será válido el token según el tiempo dado. El valor está en minutos. La expiración no puede ser mayor que el tiempo máximo permitido para un token de larga duración.
Ejemplo: expiration=60
Nota:Si no se incluyen los parámetros de client y expiration, se generará un token de corta duración y expiration usará la configuración de interrupción de token de corta duración.
f: parámetro opcional que especifica el formato de salida. Acepta el valor "json" para que devuelva el resultado en un formato json. Si no se especifica este parámetro, el token se generará en un formato de texto.
Ejemplo: {"token":"hjSXkAQl2uczsyE9T3NDvhcso6WVYWSAqBcn1GFB-L8.","expires":"1289513369381"}
El tiempo de expiración está representado en milisegundos a partir del 1 de enero de 1970.
callback: parámetro opcional que especifica el nombre de la función de devolución de llamada. Cuando se incluye el parámetro de devolución de llamada, la salida siempre se devuelve en formato json.