2014-07-08 5 views
3

Je vois beaucoup de code comme suit pour créer un nouveau ClaimsIdentity et ClaimsPrincipalAjouter Identités multiples dans ClaimsPrincipal

var claims = new List<Claim>() { 
new Claim(ClaimTypes.Name, "Me"), 
new Claim(ClaimTypes.Email, "[email protected]"), 
new Claim(ClaimTypes.Role, "Admin") 
}; 

var id = new ClaimsIdentity(claims, "Forms"); 
var principal = new ClaimsPrincipal(id); 

C'est simple et il y a beaucoup d'exemples sur le web sur la façon de le faire. Ce que je voudrais faire et je ne trouve pas beaucoup de documentation sur comment avoir plusieurs identités dans ClaimsPrincipal. ClaimsPrincipal est défini comme suit, si bien qu'il prend en charge plusieurs identités.

public class ClaimsPrincipal : IPrincipal 
{ 
    public virtual IEnumerable<ClaimsIdentity> Identities { get; } 
    ... 
} 

Je pense que l'approche au-dessus de déclarer var principale = new ClaimsPrincipal (id) ne suffit pas parce que je dois être en mesure d'ajouter une identité à un ClaimsPrincipal qui peut déjà avoir une identité. Que se passe-t-il si vous avez déjà une identité dans ClaimsPrincipal et déclarez une nouvelle instance de ClaimsPrincipal? Avez-vous maintenant deux instances de ClaimsPrincipal avec des identités différentes? Mon intuition est que est le cas, donc au lieu je besoin de vérifier l'existence de la ClaimsPrincipal actuelle et y ajouter comme ceci:

ClaimsPrincipal principal; 
if(System.Security.Claims.ClaimsPrincipal.Current != null) 
{ 
    principal = System.Security.Claims.ClaimsPrincipal.Current; 
    principal.AddIdentity(id) 

} 
else 
{ 
    principal = new ClaimsPrincipal(id); 
} 

Suis-je sur la bonne voie? Quelqu'un peut-il donner un aperçu de ce qui se passe sous le capot lorsqu'il y a plusieurs identités dans ClaimsPrincipal, si je ne suis pas sur la bonne voie, pouvez-vous proposer des suggestions sur la façon d'utiliser plusieurs identités dans ClaimsPrincipal?

+0

duplication possible de [Comment faire pour supprimer ClaimsIdentity de ClaimsPrincipal] (http://stackoverflow.com/questions/24685719/how-to-remove-claimsidentity-from-claimsprincipal) –

+0

Ils ne sont pas des doublons. L'un demande comment ajouter une identité, l'autre consiste à supprimer une identité. Similaire, mais il y a différentes considérations impliquées. –

Répondre

1

Il est un constructeur, qui le fera pour vous:

public ClaimsPrincipal(IEnumerable<ClaimsIdentity> identities) 

Cependant, la sémantique de ce sont indéfinis. Microsoft ne l'a pas encore utilisé et je n'ai jamais été capable de le sérialiser en un jeton SAML interopérable ... Je ne suis pas sûr de savoir ce que SesAM va faire avec.

+0

Merci d'avoir répondu. Oui, j'ai vu ça, mais je n'arrivais pas à comprendre comment l'utiliser. Ce que j'ai fini par faire était d'obtenir la collection d'identités directement à partir du jeton et d'ajouter ou de supprimer des identités à ce niveau, puis de recréer le ClaimsPrincipal à partir de la collection de ClaimsIdenties. Quelque chose comme ceci: identities = handler.ValidateToken (token, cookieHandler.Path). Je vais mettre à jour avec ma question au cours du week-end le code que j'ai fini avec. –

Questions connexes