Configuration du service de jetons

Le service de jetons authentifie les utilisateurs lorsque l'authentification ASP.NET est utilisée (en d'autres termes, lorsque SQL Server ou un fournisseur personnalisé est utilisé pour les magasins de rôles et d'utilisateurs). Un jeton agit comme une clé permettant d'accéder à un service sécurisé et est donné uniquement aux utilisateurs authentifiés. Un jeton est une chaîne d'informations chiffrées qui contient le nom de l'utilisateur, le délai d'expiration et d'autres informations. Le jeton est donné à l'utilisateur authentifié par le biais des services Web disponibles dans <Instance d'ArcGIS Server>/Tokens.

Les jetons fournissent un niveau de sécurité pour vos services SIG Web mais ne sont pas aussi sécurisés que certaines autres méthodes, telles que l'authentification Windows intégrée. La sécurité de votre système avec les jetons dépend du contrôle de l'accès aux jetons. Les demandes de jetons requièrent une connexion sécurisée (HTTPS) par défaut, mais vous pouvez également exiger d'utiliser HTTPS pour toutes les demandes qui utilisent le jeton. Cela reviendrait à exiger HTTPS pour le dossier qui contient les services SIG sécurisés. Vous pouvez exiger HTTPS pour un dossier de services en ouvrant les propriétés du dossier dans le gestionnaire ou dans ArcCatalog et en cochant la case Accès Web crypté requis.

Le service de jetons est un service Web qui est installé avec le composant Applications Web d'ArcGIS pendant l'installation d'ArcGIS Server. Pour la version actuelle du logiciel, le service de jetons est activé automatiquement lorsqu'il est requis. Le service de jetons est activé lorsque vous spécifiez que les utilisateurs seront stockés dans Microsoft SQL Server ou dans un fournisseur d'appartenance personnalisé (consultez la rubrique Vue d'ensemble de la configuration des utilisateurs et des rôles). Le service de jetons n'est pas activé ni utilisé lorsque vous spécifiez que les comptes d'utilisateurs Windows doivent être utilisés pour authentifier les utilisateurs de vos services SIG, à moins que vous utilisiez SQL Server ou un fournisseur personnalisé pour les rôles et vous activiez les jetons pour l'authentification des utilisateurs.

Lorsque le service de jetons est activé, vous pouvez définir le délai d'expiration maximal autorisé pour les jetons. Ce paramètre est décrit dans la section Délai d'expiration des jetons. Vous pouvez également affecter une valeur unique à la clé de chiffrement pour votre installation ; consultez la section Clé partagée pour le service de jetons. Ce sont là les seules procédures de configuration disponibles pour le service de jetons.

Lorsque des jetons sont requis pour un service SIG, le logiciel client utilise le service SIG selon l'approche suivante :

  1. Le client adresse une demande au service SIG.
  2. Le serveur SIG répond qu'un jeton est requis et fournit l'URL du service de jetons.
  3. Le client demande un jeton auprès du service de jetons en fournissant un nom d'utilisateur et un mot de passe valides.
  4. Le service de jetons valide le nom d'utilisateur et le mot de passe auprès de la base de données (ou du fournisseur d'appartenance personnalisé) et, s'ils sont valides, renvoie un jeton au client.
  5. Le client adresse une demande à un service SIG et inclut le jeton avec la demande.
  6. Le serveur SIG valide le jeton et renvoie au client la réponse à la demande de service.

Que faire si vous voulez autoriser des utilisateurs à accéder aux services sans qu'ils doivent fournir de jeton ni d'identifiant de connexion ? Vous pouvez autoriser l'accès anonyme à des services ou des dossiers à l'aide du rôle Tous (consultez la rubrique Définition d'autorisations pour un service ou un dossier).

Lorsque le service de jetons est activé et requis pour l'accès à des services SIG, le logiciel client doit être en mesure d'obtenir et d'utiliser le jeton, comme dans le processus décrit ci-dessus. Les clients ESRI obtiennent et utilisent automatiquement des jetons. Lors de la connexion à un service Internet ArcGIS Server qui nécessite un compte de connexion, le comportement du client est le suivant :

Notez que lorsque vous utilisez un jeton dans des applications Web, l'utilisateur final de l'application dans le navigateur n'entre pas d'informations d'identification pour le service SIG. Les informations d'identification pour le service doivent être spécifiées par avance dans le gestionnaire ou dans l'environnement de développement. Les mêmes informations d'identification sont utilisées pour tous les utilisateurs de l'application Web. L'application Web elle-même peut être sécurisée pour nécessiter un compte de connexion, mais ce compte est validé séparément, en fonction de la configuration de la sécurité pour l'application Web dans le gestionnaire ou par d'autres moyens. Grace à la programmation personnalisée, il est possible de transmettre les informations d'identification de l'utilisateur final au service SIG. Pour plus d'informations, reportez-vous à l'aide pour les développeurs. Lorsque vous utilisez l'authentification IIS (utilisateurs stockés dans Windows), les informations d'identification sont transmises automatiquement de l'application aux services Web sous-jacents.

Le gestionnaire vous permet de définir plusieurs paramètres pour le service de jetons : la fenêtre d'expiration des jetons (des jetons éphémères et persistants) et la clé partagée de chiffrement. Chacun de ces paramètres est expliqué ci-dessous.

Délai d'expiration des jetons

Lorsque le service de jetons est activé, vous pouvez définir le délai d'expiration d'un jeton dans le gestionnaire, par le biais des paramètres de sécurité. Le délai d'expiration détermine la période pendant laquelle le jeton sera valide. L'utilisateur final peut visualiser un message d'expiration ou un autre message d'erreur si un jeton périmé est utilisé.

De courts délais d'expiration de jeton fournissent une meilleure sécurité mais peuvent amener des utilisateurs légitimes à rencontrer des problèmes d'expiration de jeton pendant qu'ils utilisent des services, si l'application ne les détecte pas, et à obtenir un nouveau jeton (les clients Desktop et ADF sont en mesure d'obtenir de nouveaux jetons). Un paramètre de délai d'expiration est attribué aux jetons pour limiter leur utilisation non autorisée. Si un pirate informatique réussit à surveiller la communication entre l'utilisateur autorisé et le serveur, il est en mesure de capturer le jeton. Si le jeton est intercepté, le délai d'expiration limitera sa durée d'utilisation. Ainsi, pour augmenter la sécurité, vous pouvez définir le délai d'expiration des jetons en spécifiant une période plus courte. L'inconvénient d'un court délai d'expiration du jeton est que le développeur devra incorporer un nouveau jeton dans l'application avant l'expiration du jeton.

Si vous écrivez une application personnalisée, vous pouvez détecter l'expiration du jeton et fournir un message approprié ou obtenir un nouveau jeton. Pour plus d'informations, reportez-vous à l'aide pour les développeurs.

Deux fenêtres d'expiration de jeton sont définies à la page Sécurité > Paramètres :

Une méthode appropriée pour empêcher la capture et l'utilisation non autorisée de jetons consiste à exiger l'utilisation de HTTPS (SSL) pour toutes les communications avec les services SIG. Pour cela, vous devez exiger une communication sécurisée (SSL) pour l'application ArcGIS et les services Web. Pour obtenir des instructions pour requérir HTTPS (SSL) pour une application dans IIS, consultez la rubrique Configuration de SSL.

Clé partagée pour le service de jetons

La clé partagée pour le service de jetons est utilisée pour chiffrer le jeton. Le jeton est chiffré à l'aide du nom d'utilisateur et d'autres informations, puis envoyé au client. Lorsque le client envoie une demande pour un service SIG, il inclut le jeton. Le serveur utilise alors la clé partagée pour déchiffrer le jeton. Le serveur vérifie l'identité du client avant d'autoriser l'accès au service SIG. La clé partagée garantit que le serveur a créé le jeton.

Comme la clé partagée est essentielle pour garantir l'identité et l'autorisation du client, une valeur unique d'une longueur appropriée doit être attribuée à la clé. Le gestionnaire attribue une valeur aléatoire à la clé partagée lorsque le service de jetons est activé. Vous pouvez définir la clé vous-même si vous le souhaitez. Pour définir la clé partagée, accédez à Sécurité > Paramètres dans le gestionnaire et, sous l'en-tête Service de jetons, cliquez sur le bouton Paramètres. Dans la boîte de dialogue Paramètres qui s'affiche, définissez la valeur Clé partagée. La clé doit être de 16 caractères (les caractères spécifiés après les 16 premiers ne sont pas utilisés). Il est recommandé d'utiliser un ensemble de caractères aléatoires pour la clé. Tous les caractères peuvent être utilisés, y compris les caractères non alphanumériques. La clé doit avoir une valeur qui ne peut pas être devinée facilement par quiconque intercepterait le jeton. Comme les utilisateurs n'auront pas besoin d'utiliser ni de se souvenir de la clé, la complexité n'est ici pas un problème alors qu'elle peut l'être avec les mots de passe.

Le jeton est chiffré avec la clé à l'aide de la méthode de chiffrement AES (Advanced Encryption Standard), également connue sous le nom de Rijndael. Les 16 caractères de la clé correspondent aux 128 bits utilisés pour le chiffrement. Pour plus d'informations sur le chiffrement et la norme AES, reportez-vous à des références sur la sécurité ou à quelqu'un dans votre organisation qui est compétent dans les domaines de la sécurité et du chiffrement.

Page Web GetToken

Une page HTML est fournie avec le service de jetons pour permettre de demander manuellement des jetons. Cela requis en général uniquement lors de la création d'applications Web à l'aide de l'API JavaScript ArcGIS ou à des fins de test ou de dépannage. Les clients tels que les applications Web ADF et ArcGIS Desktop récupèrent automatiquement des jetons et ne requièrent pas cette page. La page GetToken se trouve sur le serveur Web à l'adresse https://<serveur Web>/ArcGIS/Tokens/gettoken.html (ou, si vous avez effectué l'installation avec un nom d'instance autre que le nom par défaut, substituez le nom pour ArcGIS).

Pour utiliser la page GetToken, entrez les informations suivantes :

Si vous vous préoccupez d'un mauvais emploi possible de la page GetToken, vous pouvez la supprimer ou en limiter l'accès en utilisant le Gestionnaire des services Internet (IIS) ou les autorisations du système de fichiers. Notez que même si la page GetToken n'est pas disponible, des demandes de jetons peuvent être adressées au service de jetons à l'aide de la demande gettoken au dossier, en utilisant le format de demande tel qu'il est décrit dans la section suivante.

Format de demande de jeton

Pour obtenir un jeton du serveur, effectuez une demande d'URL. Les clients qui utilisent des jetons, tels qu'ArcGIS Desktop, l'infrastructure Web ADF, l'API Web et les clients mobiles utilisent cette approche, de même que la page GetToken décrite dans la section précédente.

Demande de jeton à l'aide de l'extrémité tokens

Vous pouvez demander un jeton à l'aide de l'extrémité tokens. Par exemple, l'URL suivante peut être utilisée pour obtenir un jeton d'un serveur :

https://monserveur.example.com/arcgis/tokens?request=gettoken&username=myuser&password=secret1&clientid=ref.monserveur.example.com&expiration=1440&f=json&callback=myfunction

Cette demande obtiendra un jeton pour l'utilisateur utilisateur1 pour une application Web qui s'exécute sur le même serveur (monserveur.example.com) avec une période de validation d'un jour (1 440 minutes).

Les paramètres suivants peuvent être spécifiés dans la chaîne de requête :

  • request : la valeur de ce paramètre est toujours gettoken (request=gettoken). (obligatoire).

  • username : le nom d'un utilisateur dans le système. (obligatoire).

  • password : mot de passe de l'utilisateur dans le système. (obligatoire).

    RemarqueRemarque :

    HTTPS/SSL chiffre le nom d'utilisateur et le mot de passe pendant la transmission du jeton. Pour plus d'informations, reportez-vous à la section Connexion sécurisée (HTTPS/SSL) ci-dessous.

  • clientid : paramètre facultatif qui identifie le client. Utilisez un caractère "." entre le type et la valeur. Si ce paramètre n'est pas spécifié, le jeton utilisera un paramètre de délai d'expiration des jetons éphémères.

    Valeurs :

    • ip : adresse IP du client.

      Exemple : clientid=ip.10.14.102.85

    • ref : URL de base de l'application Web dans laquelle ce jeton sera utilisé. Ce paramètre doit être spécifié si la valeur du paramètre client est referrer.

      Exemple : clientid=ref.http://monserveur/monapplicationweb

    • requestip : si la valeur est spécifiée en tant que requestip (IP de la requête), le jeton est généré pour l'IP d'où émane la demande.

      Exemple : clientid=requestip

  • expiration : paramètre facultatif spécifiant combien de temps le jeton sera valide à partir de sa publication. La valeur est exprimée en minutes. Si ce paramètre n'est pas inclus, l'expiration utilisera le paramètre de délai d'expiration des jetons éphémères.

  • f : nouveauté d'ArcGIS Server 10.0 Service Pack 1 (SP1), ce paramètre facultatif précise le format en sortie. Il accepte la valeur "json" pour renvoyer le résultat au format json. Si ce paramètre n'est pas précisé, le jeton est généré au format texte.

    Exemple : {"token":"hjSXkAQl2uczsyE9T3NDvhcso6WVYWSAqBcn1GFB-L8.","expires":"1289513369381"}

    Le délai d'expiration est exprimé en millisecondes depuis le 1er janvier 1970.

  • callback : paramètre facultatif précisant le nom de la fonction de rappel. Lorsque le rappel est inclus, la sortie est toujours renvoyée au format json.

Demande de jeton à l'aide de l'extrémité generateToken

Nouveauté d'ArcGIS Server 10.0 Service Pack 1 (SP1), vous pouvez également demander un jeton à l'aide de l'extrémité generateToken. Par exemple, l'URL suivante peut être utilisée pour obtenir un jeton d'un serveur :

https://monserveur.example.com/arcgis/tokens/generateToken?username=myuser&password=mypass&client=referer|ip|requestip&referer=referer&ip=ipaddress&expiration=expiration&f=json&callback=myfunction

Les paramètres suivants peuvent être spécifiés dans la chaîne de requête :

  • username : nom d'utilisateur pour lequel le jeton est créé. (obligatoire).

  • password : mot de passe correspondant au nom d'utilisateur. (obligatoire).

    RemarqueRemarque :

    HTTPS/SSL chiffre le nom d'utilisateur et le mot de passe pendant la transmission du jeton. Pour plus d'informations, reportez-vous à la section Connexion sécurisée (HTTPS/SSL) ci-dessous.

  • client : paramètre facultatif qui identifie le client. Si ce paramètre n'est pas spécifié, le jeton utilisera un paramètre de délai d'expiration des jetons éphémères.

    Valeurs :

    • referer : URL de base de l'application Web dans laquelle ce jeton sera utilisé. Ce paramètre doit être spécifié si la valeur du paramètre client est referrer.

      Exemple : referer=http://monserveur/monapplicationweb

    • ip : adresse IP de la machine à partir de laquelle le jeton sera utilisé. Ce paramètre doit être spécifié si la valeur du paramètre client est ip.

      Exemple : ip=10.14.102.85

    • requestip : si la valeur est spécifiée en tant que requestip (IP de la requête), le jeton est généré pour l'IP d'où émane la demande.

  • expiration : paramètre facultatif spécifiant combien de temps le jeton sera valide à partir de sa publication. La valeur est exprimée en minutes. Ce délai ne peut pas être supérieur au délai maximal autorisé pour un jeton persistant.

    Exemple : expiration=60

    RemarqueRemarque :

    Si les paramètres client et expiration ne sont pas inclus, un jeton éphémère est créé et l'expiration utilise le paramètre de délai d'expiration de jeton éphémère.

  • f : paramètre facultatif précisant le format en sortie. Il accepte la valeur "json" pour renvoyer le résultat au format json. Si ce paramètre n'est pas précisé, le jeton est généré au format texte.

    Exemple : {"token":"hjSXkAQl2uczsyE9T3NDvhcso6WVYWSAqBcn1GFB-L8.","expires":"1289513369381"}

    Le délai d'expiration est exprimé en millisecondes depuis le 1er janvier 1970.

  • callback : paramètre facultatif précisant le nom de la fonction de rappel. Lorsque le paramètre de rappel est inclus, la sortie est toujours renvoyée au format json.

Connexion sécurisée (HTTPS/SSL) requise pour le service de jetons

Une connexion sécurisée utilisant HTTPS (SSL ou Secure Sockets Layer) est requise par défaut lors de la demande d'un jeton auprès du service de jetons. HTTPS chiffre le nom d'utilisateur et le mot de passe pendant la transmission. Le client doit utiliser HTTPS lors de la demande d'un jeton, soit par la méthode standard dans laquelle le nom d'utilisateur et le mot de passe sont inclus dans la chaîne de requête (utilisée par ArcGIS Desktop, les contrôles Web ADF et d'autres clients), soit par le biais de la page Web GetToken.html.

A des fins de tests internes uniquement, vous pouvez désactiver le protocole HTTPS, afin que les jetons puissent être obtenus à l'aide du protocole HTTP non sécurisé. Soyez conscient que les mots de passe envoyés à l'aide du protocole HTTP peuvent être interceptés par quiconque est connecté au réseau. L'utilisation du protocole HTTP pour les jetons doit être nécessaire uniquement sur un serveur de développement où la politique de votre organisation interdit l'installation du serveur Web IIS sur la machine de développement. Dans ces circonstances, le développement s'effectue en général à l'aide du serveur Web basé sur des fichiers dans Visual Studio (Cassini), qui ne prend pas en charge l'utilisation de SSL/HTTPS. Lorsque les services Internet sont disponibles, SSL doit toujours être utilisé comme protection contre la capture et l'utilisation non autorisée des noms d'utilisateurs et des mots de passe. Pour plus d'informations sur la configuration de SSL, reportez-vous à la rubrique Configuration de SSL.

Pour configurer le service de jetons afin d'autoriser les demandes HTTP non sécurisées de jetons, procédez comme suit :

  1. Ouvrez le fichier <racine du serveur Web>\ArcGIS\Tokens\web.config avec un éditeur de texte ou un éditeur XML (si votre instance ArcGIS ne se trouve pas à l'emplacement par défaut, C:\Inetpub\wwwroot\ArcGIS, accédez au dossier de votre instance ArcGIS).
  2. Recherchez les balises suivantes à l'intérieur de la section <appSettings>. Si les balises n'existent pas, ajoutez-les.
    <appSettings>
    	<add key="RequireSSL" value="True" />	
    	<add key="TokenServiceURL" value="XYZ" />
    <appSettings>
    
  3. Attribuez à la clé RequireSSL la valeur False et modifiez la valeur de TokenServiceURL en spécifiant http à la place de https. Enregistrez alors le fichier. Aucun redémarrage des services Internet ne devrait être nécessaire, car toute modification effectuée dans le fichier web.config devrait redémarrer l'application Service de jetons.
  4. Répétez les étapes ci-dessus pour les fichiers web.config dans <racine du serveur Web>\ArcGIS\rest et <racine du serveur Web>\ArcGIS\Services.

Veillez à restaurer l'exigence de SSL lorsque cela est approprié. Pour rendre SSL de nouveau nécessaire dans le service de jetons, rétablissez la valeur True du paramètre RequireSSL, définissez TokenServiceURL afin d'utiliser https, puis enregistrez le fichier. Procédez ainsi pour chaque fichier web.config dans les dossiers Tokens, rest et Services.

Rendre le service de jetons accessible sur Internet

Comme cela a été indiqué ci-dessus, les clients ArcGIS Desktop, ArcGIS Explorer et Web ADF ont besoin d'un accès au service de jetons pour pouvoir demander des jetons pour les services sécurisés. Lorsque vous rendez une instance d'ArcGIS Server accessible sur Internet, vous devez modifier les URL permettant d'accéder au service de jetons afin qu'il puisse être trouvé sur Internet.

Quand ArcGIS Server est installé, il stocke le nom de la machine dans l'URL pour l'accès au service de jetons. Dans une configuration d'intranet où ce nom de machine peut être résolu, cela fonctionnera correctement. Toutefois, lorsque vous rendrez cette machine accessible sur Internet, le nom de la machine ne pourra pas être résolu par vos clients.

Pour résoudre ce problème, vous devez modifier trois fichiers web.config dans les dossiers rest, Services et Tokens de votre instance ArcGIS Server (<racine Web>\<nom de l'instance ArcGIS Server>). Ouvrez chacun de ces fichiers web.config dans un éditeur de texte et procédez comme suit :

  1. Dans l'élément appSettings, recherchez l'élément avec la clé : TokenServiceURL.
  2. Modifiez la valeur de cette clé en remplaçant https://<nom de l'ordinateur>/ArcGIS/tokens par https://<nom du domaine public>/ArcGIS/tokens.

3/6/2012