Can someone please help me to solve this problem? I'm testing the API using Postman
I'm following a tutorial about asp.net core.
And I'm on its Authentication part now.
I don't really understand whats the reason for the error.
In the tutorial, it has a login and it returns token.
This is the code for login. Which is working. I know this is working because it returns a token. I also tried using an invalid login. and it returns 401 Unauthorized
But when I use the correct login credentials which are found in the database. It returns token
[HttpPost("login")]
public async Task<IActionResult> Login(UserForLoginDto userForLoginDto)
{
var userFromRepo = await _repo.Login(userForLoginDto.Username.ToLower(), userForLoginDto.Password);
if (userFromRepo == null)
return Unauthorized();
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
new Claim(ClaimTypes.Name, userFromRepo.Username)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.Now.AddDays(1),
SigningCredentials = creds
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
return Ok(new {
token = tokenHandler.WriteToken(token)
});
}
Then the next part of the tutorial is to limit the access. The user should be logged in first in order to view the content.
Below is the code
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>{
options.TokenValidationParameters = new TokenValidationParameters{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
ValidateIssuer = false
};
});
Then enabled
app.UseAuthentication();
I also enabled the [Authorize]
in the Values Controller
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
This is the screenshot of postman
I followed the tutorial. I paste the token I received from login. But it gives me the error
WWW-Authenticate →Bearer error="invalid_token", error_description="The audience is invalid"
Why does the error give me invalid token
if the token is from the login? How do I fix this? I've been searching for a while but I can't solve this my self. Thank you.