Je conçois un service Web RESTful auquel les utilisateurs doivent avoir accès, mais également d'autres services et applications Web. Toutes les demandes entrantes doivent être authentifiées. Toutes les communications ont lieu via HTTPS. L'authentification de l'utilisateur fonctionnera sur la base d'un jeton d'authentification, acquis en POSTANT le nom d'utilisateur et le mot de passe (via une connexion SSL) à une ressource / session fournie par le service.
Dans le cas des clients de service Web, il n'y a aucun utilisateur final derrière le service client. Les demandes sont initiées par des tâches planifiées, des événements ou d'autres opérations informatiques. La liste des services de connexion est connue à l'avance (évidemment, je suppose). Comment dois-je authentifier ces demandes provenant d'autres services (Web)? Je souhaite que le processus d'authentification soit aussi simple que possible à mettre en œuvre pour ces services, mais pas au détriment de la sécurité. Quelles seraient les normes et les meilleures pratiques pour un scénario comme celui-ci?
Options auxquelles je peux penser (ou qui m'ont été suggérées):
Demandez aux services clients de recourir à un «faux» nom d'utilisateur et mot de passe, et de les authentifier de la même manière que les utilisateurs. Je n'aime pas cette option - ça ne me semble pas juste.
Attribuez un identifiant d'application permanent pour le service client, éventuellement une clé d'application. Autant que j'ai compris, c'est la même chose que d'avoir un nom d'utilisateur + un mot de passe. Avec cet identifiant et cette clé, je peux soit authentifier chaque demande, soit créer un jeton d'authentification pour authentifier d'autres demandes. Quoi qu'il en soit, je n'aime pas cette option, car toute personne qui peut obtenir l'identifiant et la clé de l'application peut se faire passer pour le client.
Je pourrais ajouter une vérification d'adresse IP à l'option précédente. Cela rendrait plus difficile d'effectuer de fausses demandes.
Certificats clients. Configurez ma propre autorité de certification, créez un certificat racine et créez des certificats clients pour les services clients. Cependant, quelques problèmes me viennent à l'esprit: a) comment puis-je encore permettre aux utilisateurs de s'authentifier sans certificats et b) à quel point ce scénario est-il compliqué à mettre en œuvre du point de vue du service client?
Quelque chose d'autre - il doit y avoir d'autres solutions là-bas?
Mon service fonctionnerait sur Java, mais j'ai délibérément omis des informations sur le cadre spécifique sur lequel il serait construit, car je suis plus intéressé par les principes de base et pas tant par les détails de mise en œuvre - je suppose que la meilleure solution pour cela sera être possible de mettre en œuvre quel que soit le cadre sous-jacent. Cependant, je suis un peu inexpérimenté avec ce sujet, donc des conseils et des exemples concrets sur la mise en œuvre réelle (tels que des bibliothèques tierces utiles, des articles, etc.) seront également très appréciés.