15

Sto utilizzando mvc 5 con identità 2.0. Voglio utilizzare i valori delle attestazioni personalizzate sull'applicazione, ma ottengo un valore nullo. Dove sto sbagliando? Please help meImpossibile aggiungere e recuperare valori di attestazioni personalizzate

codice aggiornato

codice di inizio controller conto

if (!string.IsNullOrEmpty(model.UserName) && !string.IsNullOrEmpty(model.Password)) 
      { 
       AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
       var result = SignInManager.PasswordSignIn(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 


       //Generate verification token 
       Dictionary<string, string> acceccToken = null; 
       if (SignInStatus.Success == 0) 
       { 
        var userDeatails = FindUser(model.UserName, model.Password).Result; 
        if (userDeatails != null) 
         acceccToken = GetTokenDictionary(model.UserName, model.Password, userDeatails.Id); 
       } 
       if (model.RememberMe) 
       { 
        HttpCookie userid = new HttpCookie("rembemberTrue", "1"); 
        userid.Expires.AddDays(1); 
        Response.Cookies.Add(userid); 
       } 
       else 
       { 

        HttpCookie userid = new HttpCookie("rembemberTrue", "0"); 
        userid.Expires.AddDays(1); 
        Response.Cookies.Add(userid); 

       } 
       #region custom claims 


       var claims = new Claim[] 
          { 
        new Claim("urn:Custom:MasterUniqueId", Convert.ToString(Guid.NewGuid())) 
           }; 
       ClaimsIdentity identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); 
       IAuthenticationManager authenticationManager = System.Web.HttpContext.Current.GetOwinContext().Authentication; 
       authenticationManager.SignIn(identity); 

Starup.Auth.cs

public void ConfigureAuth(IAppBuilder app) 
     { 
      // Configure the db context, user manager and signin manager to use a single instance per request 
      app.CreatePerOwinContext(ApplicationDbContext.Create); 
      app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
      app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

      // Enable the application to use a cookie to store information for the signed in user 
      // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
      // Configure the sign in cookie 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Account/Login"), 
       Provider = new CookieAuthenticationProvider 
       { 
        // Enables the application to validate the security stamp when the user logs in. 
        // This is a security feature which is used when you change a password or add an external login to your account. 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
         validateInterval: TimeSpan.FromMinutes(30), 
         regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
       }, 
       SlidingExpiration = true, 
       ExpireTimeSpan = TimeSpan.FromMinutes(60) 
      }); 

....... ....

un altro controller

Qui sto cercando di recuperare che i valori di reclamo ma è spettacolo nullo

var identity = (ClaimsIdentity)User.Identity; 
var res= identity.FindFirst("urn:Custom:MasterUniqueId"); 

res è nullo

+0

Puoi mostrare il codice di accesso completo che stai utilizzando? Il metodo in cui è inserito questo codice è correttamente asincrono? Inoltre, ti manca un 'app.UseCookieAuthentication (...)' nel tuo avvio? –

+0

@BrendanGreen, ho aggiornato la mia domanda, per favore dai un'occhiata –

+0

Riesci a vedere quale sia l'output di 'User.Identity.IsAuthenticated' e' User.Identity.Name'? –

risposta

-1

Hai provato:

var res = identity.Claims.Where(c=>c.Type=="urn:Custom:MasterUniqueId").FirstOrDefault(); 

?

+0

Sì, ho provato, ma sto ancora ottenendo null. Quando il codice di accesso in esecuzione in quel momento MasterUniqueId visibile nelle proprietà. ma dopo l'ambito del metodo, è appena finito –

0

Nel controller del proprio account, per ottenere un AuthenticManager valido, è necessario utilizzare Request.GetOwinContext().Authentication. Mi fa impazzire System.Web.HttpContext.Current.GetOwinContext().Authentication ottieni un nuovo AuthenticManager invece dell'attuale contesto Owin uno