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を保護している限り、正しいと思います。しかし、私は何か不足しているかもしれません。助けてください。

注:私は、Macコミュニティ 加え

答えて

8

でのVisual Studio 2017を使用して開発していますはい、あなたはuser.identity.nameに翻訳された固有の名前を請求指定する必要があります。

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

ありがとう、ショーン、それは私のために働いた。 – Nps

+0

これ以降、別の問題が発生しています。 userManager.GetUserAsyc(User)がnullを返しています。しかし、User.Identity.Nameが正しい値を返しています。私はここで何が欠けていますか? – Nps

+0

GetUserByNameまたは電子メールを代わりに試す –

関連する問題