Pokud používáte ve své aplikaci technologii WIF v současné verzi pro .NET Framework 3.5/4.0 (verze 1.0), brzy zjistíte, že dotazování na claims obsažené v objektu ClaimsIdentity resp. ClaimsPrincipal je poměrně složité (je nutné použít buď LINQ dotaz nebo foreach cyklus).
Po integraci WIF přímo do .NET Frameworku v připravované verzi 4.5 (nyní k dispozici v RC) dojde v tomto k výraznému posunu. A mezitím než se tak stane jsem připravil extension metody, které portují metody nové verze i do verze současné.
Metody jsem umístil do třídy ClaimsPrincipalExtensions, jejíž kód je k dispozici k prohléhnuti a stažení zde. Soubor ClaimsPrincipalExtensions.cs stačí přidat do VS projektu a pro použití doplnit příslušný using:
using Microsoft.IdentityModel.Claims;
Doplněné jsou konkrétně tyto metody:
- FindAll – Vyhledání všech claims určeného typu nebo claims vyhovující predikátu.
- FindFirst – Vyhledání prvního claimu určeného typu nebo claim vyhovující predikátu.
- HasClaim – Zjištění, zda identity/principál obsahuje claim určený jeho typem a hodnotou nebo vyhovující predikátu.
- GetClaims – Vrací kolekci claims ze všech identit objektu ClaimsPrincipal (pouze na objektu principál).
Tyto metody jsou dostupné u objektu identity pro interface IClaimsIdentity a na objektu principál přímo pro interface IPrincipal, který je vždy interně převeden na objekt ClaimsPrincipal. Nové metody jsou tedy dostupné na libovolném objektu principál, stejně jako tomu bude v nové verzi WIF 4.5 (v té každý principál objekt dědí rovnou ze třídy ClaimsPrincipal).
Typické použití nového objektového modelu pak může například v ASP.NET aplikaci vypadat takto:
lblEmail.Text = HttpContext.Current.User.FindFirst(ClaimTypes.Email).Value;
Dokumentaci k novým metodám naleznete zde.