web-dev-qa-db-fra.com

Quelle est l'idée derrière IIdentity et IPrincipal dans .NET

Alors, quel est le but de l'existence à la fois de IIdentity et IPrincipal, et non de IIdentityMergedWithPrincipal? Quand ne suffit-il pas d'implémenter les deux dans la même classe?

Aussi, pour comprendre le but, j'aimerais savoir d'où vient ce concept:

  • Il est originaire de .Net
  • Il existe un concept d'identité/principal comme modèle de conception, qui System.Security.Principal implémenté dans ces interfaces
  • Il est originaire ailleurs et pris en charge pour la compatibilité

Par conséquent, UserPrincipal de System.DirectoryServices agit de la même manière que IPrincipal mais ne l'implémente pas par accident ou par intention?

P.S. Je cherche un raisonnement derrière l'idée, pas une comparaison avantages/controverses, alors essayez de ne pas lancer de discussion basée sur l'opinion

43
Aloraman

IIdentity est juste utilisé pour l'identité authentifié de l'utilisateur, quels que soient les rôles qu'ils peuvent avoir.

IPrincipal est utilisé pour combiner l'identité d'un utilisateur avec les rôles autorisés qu'ils ont dans un contexte de sécurité donné.

Par exemple, vous pouvez utiliser un fournisseur de connexion tiers, comme Facebook ou Google, pour obtenir l'identité de l'utilisateur, mais vous n'obtiendrez pas de principal de ces fournisseurs, car ils ne fournissent aucun rôle. Vous pouvez utiliser votre propre application ou un fournisseur d'autorisation basé sur des rôles tiers pour appliquer des rôles à, par exemple, un FacebookIdentity ou GoogleIdentity. Une application différente peut s'attendre à un principal différent, avec ses propres rôles, mais utilise toujours la même identité que dans une autre application.

59
Mark Cidade

Un principal est le contexte de sécurité d'un utilisateur.

Dans le cas de .NET, un mandant prend en charge le concept d'avoir plus d'une identité (cela n'a rien à voir avec les revendications pour le moment). Ceci est particulièrement important en ce qui concerne la sémantique que les développeurs doivent gérer en ce qui concerne l'identité de l'utilisateur. Vous pouvez être appelé en tant que développeur à prendre en charge plusieurs identités provenant de différentes sources (fournisseurs d'identités IdPs), par exemple: Twitter, Google, peu importe.

Alors, quelle est la différence entre un IPrincipal et un IIDentity? IPrincipal est le contexte de sécurité (pour un seul thread), et l'IIDentity est l'ensemble des attributs associés à cet utilisateur provenant d'un fournisseur/autorité d'identité spécifique.

13
Kevin

Comme site MSDN dit:

L'objet d'identité encapsule des informations sur l'utilisateur ou l'entité en cours de validation. À leur niveau le plus élémentaire, les objets d'identité contiennent un nom et un type d'authentification.

tandis que

L'objet principal représente le contexte de sécurité dans lequel le code s'exécute.

Reportez-vous au lien ci-dessus pour plus d'informations.

HTH

10
Kamran