2012-09-18 4 views
0

Je développe une application MVC 4 à héberger dans Azure et souhaite utiliser son service ACS pour l'authentification. Une fois l'utilisateur authentifié, j'utiliserai les détails de la réclamation pour corréler mes enregistrements locaux. Par la suite, j'aimerais étendre l'ensemble de revendications pour inclure des revendications supplémentaires qui représentent les autorisations locales que ma demande utiliserait pour les décisions d'autorisation. Je suppose que j'ai besoin de remplacer le principe, mais je ne sais pas où et quand le faire dans MVC et je veux éviter de casser toute la plomberie d'authentification qui serait normalement utilisé pendant toute la durée de la session. Quelqu'un peut-il nous éclairer là-dessus?Extension des revendications Azure ACS pour les sessions MVC

Répondre

1

En plus de ce @Eugenio Pace a dit, il est intéressant de noter que vous pouvez simplement ajouter et supprimer des demandes en provenance et à l'IClaimsPrincipal:

public static void UpdateClaims(IClaimsIdentity identity) 
{ 
    identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Name)); 
    identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Email)); 
    identity.Claims.Add(new Claim(ClaimTypes.Name, "Steve Smith")); 
    identity.Claims.Add(new Claim(ClaimTypes.Email, "[email protected]")); 
} 

UpdateClaims(User.Identity as IClaimsIdentity); 

Revendications ajoutées peuvent être soit l'un des types énumérés dans ClaimTypes ou une chaîne personnalisée de votre propre conception. Vous pouvez ajouter plusieurs revendications de type ClaimTypes.Role - Je ne suis pas sûr des autres types.

Des ClaimsCollection docs:

représente une collection des revendications associées à un seul sujet. L'ajout d'une revendication à ClaimCollection associe implicitement la revendication au sujet associé à la collection en appelant la méthode SetSubject . La suppression d'une revendication d'un ClaimCollection supprime implicitement cette association en appelant également la méthode SetSubject.

http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimcollection.aspx

Mise à jour

Pour 4,5 .Net, la classe d'identité et la méthode pour les demandes de mise à jour ont changé, ainsi que l'espace de noms:

using System.IdentityModel; 
using System.Security.Claims; 

public static void UpdateClaims(Member member, ClaimsIdentity identity) 
{ 
    identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Name)); 
    identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Email)); 
    identity.AddClaim(new Claim(ClaimTypes.Name, "Steve Smith")); 
    identity.AddClaim(new Claim(ClaimTypes.Email, "[email protected]")); 
} 

UpdateClaims(User.Identity as ClaimsIdentity); 

http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.aspx

2

Le point d'extension dans WIF pour enrichir le ClaimSet est le ClaimsAuthenticationManager

De la documentation:

Le gestionnaire d'authentification des demandes fournit un point d'extensibilité dans le pipeline de traitement de RP que vous pouvez utiliser pour filtrer , modifiez ou injectez de nouvelles revendications dans l'ensemble des revendications présentées par un IClaimsPrincipal avant l'appel de l'application RP.

Vous pouvez également ajouter des règles dans ACS pour enrichir le jeton avec les revendications dont vous avez besoin.

Questions connexes