1

저는 ASP.NET 코어 자체를 처음 사용합니다. 그러나 ASP.NET Core 2.0에서 WebAPI를 만들고 있습니다. JWT 베어러 토큰 기반 인증을 구성했습니다. 아래는 토큰을 반환하는 컨트롤러입니다.Asp.NET Core 2.0 API 컨트롤러에서 User.Identity.Name이 비어 있습니다.

[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"); 
    } 


} 

그러나 [권한 부여] 속성들로 장식되어 ValuesController의 API를 호출 할 때. 나는 User.Identity.Name이 비어 있습니다. 사용자에 대한 정보를 얻지 못했습니다. 확실하지 않습니다. 내 토큰 컨트롤러가 올바르게 작성되었습니다. 오히려 그것이 내 ValuesController를 보호하고있는 한, 그것이 옳다 고 생각합니다. 그러나 나는 뭔가를 놓칠지도 모른다. 도와주세요.

참고 : 나는

답변

8

예, 당신은 user.identity.name로 번역 된 고유 이름에 대한 주장을 지정해야 맥 커뮤니티 추가로 비주얼 스튜디오 2017를 사용하여 개발 오전 :

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

감사합니다. Shawn, 저에게 도움이되었습니다. – Nps

+0

다음에 다른 문제가 있습니다. userManager.GetUserAsyc (User)가 null을 반환합니다. 그러나 User.Identity.Name이 올바른 값을 반환합니다. 내가 여기서 무엇을 놓치고 있니? – Nps

+0

GetUserByName 또는 전자 메일 대신 –