15

Nel mio progetto API Web ASP.NET sto usando portatore autorizzazione token e ho aggiunto alcune attestazioni personalizzate ad esso, in questo modo:Ottenere valore della domanda personalizzato da token di portatore (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())); 

Is c'è un modo in cui posso accedere a questo valore di reclamo aggiuntivo nel controller senza un ulteriore viaggio nel database?

risposta

22

Certo, dentro il controller protetta effettuare le seguenti operazioni:

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

Come potrei riutilizzare questo in un modo più centralizzato? Sto usando un livello di servizio che ha bisogno di questo 'customClaimValue'. Tutte le azioni del controller devono inviare questo valore al servizio prima di ottenere/pubblicare dati. –

+1

Puoi creare un filtro personalizzato che viene eseguito prima di colpire il tuo metodo di azione –

+1

Grazie, non sapevo che potresti ottenere la richiesta corrente in un filtro. Anche un bel blog che hai lì, Taiseer! –