Je pense que toutes les réponses ci-dessus sont fausses. @Andy a probablement répondu à votre question, bien que trop vaguement. Le problème est que (a) vous supposez que vos utilisateurs sont un vecteur de menace (exploitant les cookies pour obtenir un accès non autorisé) (b) vous souhaitez utiliser des cookies dans le cadre de votre mécanisme d'authentification. En fait, ce que vous voulez réellement implémenter, c'est un type de sécurité zéro confiance, un modèle qui dit qu'aucun utilisateur ne doit en aucun cas faire confiance à aucun égard (c'est assez difficile à comprendre au début).
Essentiellement, l'implication est que vous pouvez utiliser des cookies, mais ceux-ci ne doivent être que des cookies de session. Shibbeloth et d'autres conceptions similaires pour les établissements universitaires au Royaume-Uni utilisent une combinaison de cookies de session, d'authentification tierce (au sein de l'établissement) et d'authentification de session basée sur une base de données (par rapport aux deux autres). En fait, il vérifie généralement l'institution pour les droits d'utilisateur aussi (c'est-à-dire que si vous étudiez l'informatique, vous n'avez pas besoin de la bibliothèque médicale, etc.).
Donc, l'utilisation d'un cookie persistant est votre problème, c'est un non-non définitif. Vous semblez déjà comprendre le risque lié à l'utilisation d'un cookie persistant, à savoir qu'il peut être volé (généralement en texte brut). Par conséquent, utilisez au pire des cookies de session non persistants.
Ce que vous devriez faire, à mon avis, si vous deviez utiliser cette méthode d'authentification, c'est de révoquer les cookies régulièrement et de demander à l'utilisateur de se reconnecter . Comme je l'ai expliqué, Shibbeloth est multi-facteurs de par sa conception car il compare vos informations d'identification à celles détenues par votre université. De meilleures conceptions ne permettraient pas seulement de comparer les informations utilisateur, mais nécessiteraient plus d'un identifiant (par exemple, un message texte, un e-mail ou une réponse secrète comme dans les services bancaires en ligne).
De manière réaliste, la plupart des applications basées sur le Web peuvent bénéficier énormément d'être sans état (en fonction de l'application et de la configuration requise par l'utilisateur / système). Ainsi, vous pouvez supprimer les cookies de session presque entièrement en les utilisant jusqu'à ce que la fenêtre du navigateur soit fermée / le temps écoulé ou en utilisant un magasin d'utilisateurs crypté côté client (meilleure solution).
Entre autres atténuations ce que d'autres utilisateurs ont dit, comme les navigateurs d'empreintes digitales et la surveillance des modèles d'utilisation, il existe de nombreuses stratégies que vous pouvez utiliser. Vous pouvez également utiliser la liste blanche IP, l'anti-DDoS, le remplacement régulier des informations d'identification, etc. Ce sont complémentaires, mais pas une solution en eux-mêmes.
Ce que vous ne devez jamais faire, c'est dé-prioriser la sécurité et les failles logicielles pour l'utilisateur l'expérience d'amélioration (c'est la même chose d'ailleurs). Si vous faites cela, vous pourriez un jour être responsable d'une catastrophe de protection des données (et potentiellement aller en prison et / ou perdre beaucoup d'argent).
Pour mettre pleinement en œuvre ce que vous recherchez, utilisez un application Web (probablement basée sur javascript) qui n'a pas besoin d'être installée. Cette application doit être programmée pour implémenter pleinement votre API et faire tout le gros du travail pour l'utilisateur. Il devrait idéalement effectuer un contrôle d'accès basé sur les rôles (RBAC) sur cette API (identifiez donc les différents groupes d'utilisateurs que vous avez mentionnés). Évidemment, le RBAC doit être implémenté côté serveur. Il n'y a aucune raison pour laquelle votre API ne peut pas fournir ou créer un lien direct vers celui-ci et stocker les jetons émis directement, ou via un autre canal tel qu'un jeton basé sur un message texte.
J'espère que cela vous donnera matière à réflexion. à votre conception.