0

J'utilise paquet auth NuGet instagram tiers pour se connecter et configurer la nouvelle revendication:ASP.NET MVC 5 revendications get

 app.UseInstagramAuthentication(new InstagramAuthenticationOptions 
     { 
      ClientId = "XXXXXXXXXXXXXXXXXXXXXXXXX", 
      ClientSecret = "XXXXXXXXXXXXXXXXXXXXXXXXX", 
      Provider = new InstagramAuthenticationProvider() 
      { 
       OnAuthenticated = (context) => 
       { 
        context.Identity.AddClaim(new Claim("urn::instagram::accesstoken", context.AccessToken)); 
        return Task.FromResult(0); 
       } 
      } 

mais lorsque je tente d'obtenir cette affirmation

 var ctx = HttpContext.GetOwinContext(); 
     ClaimsPrincipal user = ctx.Authentication.User; 
     IEnumerable<Claim> claims = user.Claims; 

Cette affirmation n'existe pas dans la liste. Pourquoi?

+0

Apparemment, parce que user.Claims va à la base de données, il ne lit pas le jeton support pour cela information. – Todd

Répondre

3

Vous devez récupérer et stocker les créances sur la connexion externe, peut-être quelque chose comme:

private async Task StoreAuthTokenClaims(ApplicationUser user) 
{ 
    // Get the claims identity 
    ClaimsIdentity claimsIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); 

    if (claimsIdentity != null) 
    { 
     // Retrieve the existing claims 
     var currentClaims = await UserManager.GetClaimsAsync(user.Id); 

     // Get the list of access token related claims from the identity 
     var tokenClaims = claimsIdentity.Claims 
      .Where(c => c.Type.StartsWith("urn:tokens:")); 

     // Save the access token related claims 
     foreach (var tokenClaim in tokenClaims) 
     { 
      if (!currentClaims.Contains(tokenClaim)) 
      { 
       await UserManager.AddClaimAsync(user.Id, tokenClaim); 
      } 
     } 
    } 
} 

Et sur la méthode ExternalLoginConfirmation:

result = await UserManager.AddLoginAsync(user.Id, info.Login); 
if (result.Succeeded) 
{ 
    await StoreAuthTokenClaims(user); 

    // Sign in and redirect the user 
    await SignInAsync(user, isPersistent: false); 
    return RedirectToLocal(returnUrl); 
} 

Après cela, vous pouvez récupérer les revendications comme:

var claimsIdentity = HttpContext.User.Identity as ClaimsIdentity; 
if (claimsIdentity != null) 
{ 
    var claims = claimsIdentity.Claims; 
}