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コミュニティ 加え
ありがとう、ショーン、それは私のために働いた。 – Nps
これ以降、別の問題が発生しています。 userManager.GetUserAsyc(User)がnullを返しています。しかし、User.Identity.Nameが正しい値を返しています。私はここで何が欠けていますか? – Nps
GetUserByNameまたは電子メールを代わりに試す –