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:
System.Security.Principal
implémenté dans ces interfacesPar 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
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.
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.
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