15

In meinem ASP.NET Web API-Projekt Ich verwende Inhaber Token-Autorisierung und ich habe einige individuelle Ansprüche darauf, wie diese hinzugefügt:Erste benutzerdefinierten Anspruch Wert von Inhaber- Token (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())); 

Ist Gibt es irgendeinen Weg, wie ich auf diesen zusätzlichen Schadenswert im Controller zugreifen kann, ohne einen zusätzlichen Trip zur Datenbank zu machen?

Antwort

22

Sicher, in Ihrem geschützten Controller tun Sie Folgendes:

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

Wie kann ich dies in einer zentralisierten Weise wiederverwenden? Ich verwende eine Dienstschicht, die diesen "customClaimValue" benötigt. Alle Controller-Aktionen müssen diesen Wert an den Service senden, bevor Daten abgerufen/gebucht werden. –

+1

Sie können einen benutzerdefinierten Filter erstellen, der ausgeführt wird, bevor Sie Ihre Aktionsmethode starten. –

+1

Danke, Sie haben nicht gewusst, dass Sie die aktuelle Anfrage in einem Filter erhalten könnten. Auch ein sehr schöner Blog, den du da hast, Taiseer! –