【发布时间】:2018-03-30 22:52:00
【问题描述】:
我是 ASP.NET 核心本身的新手。但是,我在 ASP.NET Core 2.0 中创建 WebAPI。我已经配置了基于 JWT Bearer Token 的身份验证。下面是我的控制器,它返回令牌。
[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");
}
}
但是当调用带有 [Authorize] 属性的 ValuesController API 时。我得到 User.Identity.Name 为空。我没有得到任何关于用户的信息。我不确定,我的令牌控制器是否正确编写。只要它保护我的 ValuesController,我认为它是正确的。但是,我可能会遗漏一些东西。请帮忙。
注意:我正在使用带有 Mac 社区的 Visual Studio 2017 进行开发 加法
【问题讨论】:
标签: asp.net-core-webapi asp.net-core-2.0 bearer-token asp.net-core-identity