10
votes

Kerberos, délégation et comment faire cela correctement?

J'ai deux applications faites maison distinctes qui doivent communiquer entre eux. L'une est une application frontale (ASP.NET en fait), l'autre est une interface backend à une application comptable. L'interface backend n'a pas été créée spécifiquement pour cette frontale - il s'agit d'une interface générique que de nombreuses autres applications utilisent pour intégrer notre produit.

Pour la commodité des utilisateurs, nous souhaitons fournir une authentification Windows dans notre application frontale. Cela signifie toutefois que nous devons transmettre les informations d'identification à la demande de contrôle qui doit les vérifier.

Nous ne souhaitons pas configurer notre frontale comme une application "fiduciée" au backend qui peut s'authentifier en tant qu'utilisateur. Si le frontend devait être piraté, il compromettrait également le système de backend.

Si je comprends bien, une façon de le faire avec l'authentification Windows est la délégation de Kerberos. Cependant, cela nécessite d'être explicitement activé pour l'utilisateur qui doit être délégué et la machine qui fait la délégation (le serveur avec notre frontend). Par défaut, ces options sont désactivées dans Active Directory, et je soupçonne que de nombreux Sysadmins auront leurs réservations à propos de les transformer pour tous leurs utilisateurs.

En outre, je ne suis pas vraiment sûr que c'est ce que la délégation de Kerberos était destinée. Je n'ai pas besoin de notre frontend pour imiter l'utilisateur qui se connecte. J'ai juste besoin de prouver que cet utilisateur lui ait authentifié.

Comment feriez-vous cela?


2 commentaires

Quelle est l'authentification arrière de la fin? Vous indiquez que l'extrémité frontale est intégrée de Windows (donc une application intranet), mais est l'application arrière de l'arrière-plan Wia aussi?


Kerberos est pour cela - par exemple, les utilisateurs de notre réseau local connexion à un serveur Web qui se connecte à un serveur SQL à l'aide des informations d'identification des utilisateurs . Cela nous permet d'avoir des autorisations de table / de terrain en fonction de l'utilisateur. La difficulté est que les deux systèmes doivent être conscients de la délégation de Kerberos - le site Web pour obtenir les différents jetons et le back-end pour les valider contre la même autorité. Je ne crois pas que cela sera possible directement, mais vous pourrez peut-être mettre en place un proxy au courant de la délégation entre l'interface utilisateur et l'arrière-plan.


3 Réponses :



0
votes

En réalité, la délégation de Kerberos est conçue exactement pour ce cas d'utilisation. Mais le défi ici est artisanal ceci sur un système hérité et avec les paramètres de l'annonce que vous ne voulez pas changer.

Un piratage possible doit avoir l'extrémité avant d'envoyer l'utilisateur et l'heure de l'authentification, mais le backend peut interroger les journaux d'événement Active Directory pour déterminer si cet utilisateur est authentifié à la fin de l'avant. Cela nécessite que vous utilisiez l'API de journal d'événement Windows. Et jouez également avec les paramètres de journal des événements dans Ad pour enregistrer le numéro des billets de service. (Mon souvenir est que c'est la valeur par défaut) -


1 commentaires

Je dirais que cela est ouvert à la maltraitance et le système le plus occupé est, plus une fausse approbation est probablement de se produire. Il suppose également que toutes les horloges sont parfaitement synchronisées (espérons-le vrai, mais pas garantie)



8
votes

Je ne suis pas clair ce que vous pouvez et que vous ne pouvez pas faire avec votre cas d'utilisation, mais je peux répondre à la question quelle délégation de Kerberos était destinée.

Parlons d'abord de ce que Kerberos fait avant la délégation. Il est important de bien comprendre cette partie parce qu'elle est subtile.

Kerberos authentifie l'identité des extrémités d'une communication entre deux points de fin sur un réseau, ces points de fin peuvent être des utilisateurs interactifs ou des services fonctionnant sur un ordinateur.

Ceci est Authentification forte de sorte qu'il ne permettra pas d'attaque homme intermédiaire sous quelque forme que ce soit. Si configuré correctement, un point final peut garantir qu'ils ne seront pas compromis. Au niveau du nom du service (si vous vous connectez à IIS sur une machine, il est différent de la connexion à SQL Server sur la même machine). Il utilise une forte utilisation des techniques de cryptage modernes et nécessite l'utilisation de certificats sécurisés. Les détails du protocole d'authentification sont compliqués et ne valent pas la peine d'aller à l'heure actuelle, mais cela implique environ 20 étapes différentes distinctes de confirmation entre les deux points d'extrémité authentifiant et le serveur d'authentification (sous Windows, le contrôleur de domaine est le serveur d'authentification).

alors ce que le diable est la délégation?

La délégation est une extension Microsoft à la norme Kerberos qui permet à une source de confiance de continuer l'authentification à une autre point final.

Cela vous permet d'agir en tant que "homme au milieu" - mais de nombreux paramètres doivent être configurés explicitement, des certificats installés, etc. pour permettre à cela de fonctionner. C'est loin d'être simple. (Edit: voici une autre réponse sur les détails - https://stackoverflow.com/a/954154/215752 )

Donc, par exemple, vous pouvez avoir une personne authentifier sur un site Web, puis le code .NET se connecter à un serveur SQL comme le même utilisateur pour lire les données avec les droits de ce utilisateur.


Maintenant pour répondre à votre question, car je ne suis pas sûr de ce que vous voulez faire, je présente trois choix:

1) Vous souhaitez vous connecter au système d'extrémité arrière comme le même utilisateur que celui d'authentification sur le site Web.

  • Dans ce cas, la délégation de Kerberos est parfaite - cela fait exactement ce que vous voulez.

    2) Vous souhaitez vous connecter au système d'extrémité arrière en tant qu'utilisateur différent de celui d'un authentifiant sur le site Web (par exemple, un compte de service).

    • Dans ce cas, vous ne voulez pas de délégation. Kerberos sur le site Web et Kerberos (comme un utilisateur différent) à l'arrière fonctionnera bien.

      3) Vous souhaitez vous connecter au système d'extrémité arrière comme le même utilisateur une partie de l'heure et en tant qu'utilisateur différent d'autres fois. (Par exemple, vous devez valider qu'il s'agit d'un utilisateur légal du système de fin de fin, mais souhaitez effectuer des actions de confiance en tant que compte système d'autres fois. Ceci est (dans mon expérience) le cas d'utilisation le plus courant.)

      • Dans ce cas, vous utilisez les deux. Délégation pour les connexions qui doivent valider l'identité de l'utilisateur, puis revenir à l'identité de compte de service pour les temps lorsque vous avez besoin d'un accès système à l'arrière-plan. (Une question précédente de la mienne est entrée dans les détails de la rétablissement de l'identité du système sur la plate-forme .NET Voir Comment" ONU-IMPERSONATE "(Un-délégué?) À Kerberos .)

1 commentaires

Cela devrait être la réponse acceptée, un bon aperçu pertinent pour de nombreuses situations avant de répondre spécifiquement à l'OP.