1
我是ASP.NET核心本身的新手。不過,我正在ASP.NET Core 2.0中創建WebAPI。我配置了基於JWT承載令牌的認證。下面是我的Controller返回的令牌。User.Identity.Name在Asp.NET Core 2.0 API控制器中爲空
[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,我認爲它是正確的。但是,我可能會錯過一些東西。請幫忙。
注:我使用Visual Studio 2017的Mac社區 此外
謝謝肖恩,這對我很有幫助。 – Nps
我在此之後有另一個問題。 userManager.GetUserAsyc(用戶)返回null。但是,User.Identity.Name正在返回正確的值。我在這裏錯過了什麼? – Nps
嘗試GetUserByName或Email代替 –