1

Je suis nouveau dans le noyau ASP.NET lui-même. Cependant, je crée des WebAPI dans ASP.NET Core 2.0. J'ai configuré l'authentification JWT Bearer Token. Voici mon contrôleur qui retourne le jeton.User.Identity.Name est vide dans le contrôleur API Asp.NET Core 2.0

[AllowAnonymous] 
[Route("api/[controller]")] 
public class TokenController : Controller 
{ 
    private readonly UserManager<UserEntity> userManager; 
    private readonly SignInManager<UserEntity> signInManager; 

    public TokenController(UserManager<UserEntity> userManager, SignInManager<UserEntity> signInManager) 
    { 
     this.userManager = userManager; 
     this.signInManager = signInManager; 
    } 

    // GET: api/values 
    [HttpGet] 
    public async Task<IActionResult> Get(string username, string password, string grant_type) 
    { 
     { 
      var user = await userManager.FindByEmailAsync(username); 

      if (user != null) 
      { 
       var result =await signInManager.CheckPasswordSignInAsync(user, password, false); 
       if (result.Succeeded) 
       { 

        var claims = new[] 
        { 
         new Claim(JwtRegisteredClaimNames.Sub, username), 
         new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), 
         new Claim(JwtRegisteredClaimNames.GivenName, "SomeUserID") 
        }; 

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secretesecretesecretesecretesecretesecrete")); 
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); 

        var token = new JwtSecurityToken(issuer: "test", 
                audience: "test", 
                claims: claims, 
                 expires: DateTime.Now.AddDays(15), 
                 signingCredentials: creds); 

        return Ok(new { access_token = new JwtSecurityTokenHandler().WriteToken(token), expires_on=DateTime.Now.AddDays(15) }); 

       } 
      } 
     } 

     return BadRequest("Could not create token"); 
    } 


} 

Mais lorsque vous appelez API ValuesController qui est décoré avec [Authorize] attributs. Je reçois User.Identity.Name est vide. Je ne reçois aucune information sur l'utilisateur. Je ne suis pas sûr, Mon contrôleur de jeton est correctement écrit. Tant qu'il protège mon ValuesController, je suppose que c'est correct. Cependant, je pourrais manquer quelque chose. S'il vous plaît aider.

Note: Je développe en utilisant Visual Studio 2017 avec Mac Communauté plus

Répondre

8

Oui, vous devez spécifier la demande pour le nom unique qui se traduit dans le user.identity.name:

new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName) 
+0

Merci Shawn, ça a marché pour moi. – Nps

+0

J'ai un autre problème après cela. userManager.GetUserAsyc (Utilisateur) renvoie null. Cependant User.Identity.Name me renvoie la bonne valeur. Qu'est-ce que j'oublie ici? – Nps

+0

Essayez GetUserByName ou Email à la place –