none
Como editar o valor de uma Claim RRS feed

  • Pergunta

  • Olá pessoal, estou com uma dúvida bastante específica.

    No meu sistema eu faço autenticação por Claims, e guardo vários valores nelas para deixar essas informações com acesso global, porém em determinado momento eu preciso alterar o valor de algumas delas para atualizar informações, em pesquisa na internet eu vi que algumas pessoas removem a Claim e em seguida adiciona novamente com um novo valor, porém quando eu tentei fazer isso me retorna um erro dizendo que ou ela não faz parte da minha identidade ou ela faz parte da entidade de segurança.

    Procurei também por Replace, Edit ou algo do tipo mas não tive sucesso. 

    quinta-feira, 14 de janeiro de 2016 01:20

Todas as Respostas

  • Voce Pode criar um método de extensão para atualizar essas informações:

    namespace Foobar.Common.Extensions
    {
        public static class Extensions
        {
                public static void AddUpdateClaim(this IPrincipal currentPrincipal, string key, string value)
                {
                    var identity = currentPrincipal.Identity as ClaimsIdentity;
                    if (identity == null)
                        return;
    
                    // check for existing claim and remove it
                    var existingClaim = identity.FindFirst(key);
                    if (existingClaim != null)
                        identity.RemoveClaim(existingClaim);
    
                    // add new claim
                    identity.AddClaim(new Claim(key, value));
                    var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
                    authenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(new ClaimsPrincipal(identity), new AuthenticationProperties() { IsPersistent = true });
                }
    
                public static string GetClaimValue(this IPrincipal currentPrincipal, string key)
                {
                    var identity = currentPrincipal.Identity as ClaimsIdentity;
                    if (identity == null)
                        return null;
    
                    var claim = identity.Claims.First(c => c.Type == key);
                    return claim.Value;
                }
        }
    }

    e para usa-lo

    using Foobar.Common.Extensions;
    
    namespace Foobar.Web.Main.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                // add/updating claims
                User.AddUpdateClaim("key1", "value1");
                User.AddUpdateClaim("key2", "value2");
                User.AddUpdateClaim("key3", "value3");
            }
    
            public ActionResult Details()
            {
                // reading a claim
                var key2 = User.GetClaim("key2");           
            }
        }
    }
    (fonte: http://stackoverflow.com/questions/24587414/how-to-update-a-claim-in-asp-net-identity)

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Sugerido como Resposta Erick WendelMVP quinta-feira, 14 de janeiro de 2016 12:48
    quinta-feira, 14 de janeiro de 2016 12:48