15

W moim projekcie ASP.NET Web API używam okaziciela tokena autoryzacji i dodałem kilka własnych roszczeń do niego tak:Pierwsze wartość roszczenia z niestandardowych okaziciela tokena (Web API)

var authType = AuthConfig.OAuthOptions.AuthenticationType; 
var identity = new ClaimsIdentity(authType); 
identity.AddClaim(new Claim(ClaimTypes.Name, vm.Username)); 

// custom claim 
identity.AddClaim(new Claim("CompanyID", profile.CompanyId.ToString())); 

Czy w jaki sposób mogę uzyskać dostęp do tej dodatkowej wartości roszczenia w kontrolerze bez dodatkowej podróży do bazy danych?

Odpowiedz

22

Jasne, wewnątrz chronionego kontrolera wykonać następujące czynności:

ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal; 
var customClaimValue = principal.Claims.Where(c => c.Type == "CompanyID").Single().Value; 
+0

Jak mogę ponownie użyć tego w sposób bardziej scentralizowany sposób? Korzystam z warstwy usługi, która wymaga takiej 'customClaimValue'. Wszystkie czynności kontrolera muszą wysłać tę wartość do usługi przed pobraniem/zaksięgowaniem danych. –

+1

Można utworzyć niestandardowy filtr, który działa przed naciśnięciem metody działania. –

+1

Dzięki, nie wiedziałem, że można uzyskać aktualne żądanie w filtrze. Również bardzo miły blog, który tam masz, Taiseer! –