Может кто-нибудь помочь мне решить эту проблему?Я тестирую API с помощью Postman
Я следую учебному пособию о ядре asp.net.
И я сейчас на его части аутентификации.
Надеюсьдействительно не понимаю, в чем причина ошибки.
В учебном пособии у него есть логин и он возвращает токен.
Это код для входа в систему.Который работает.Я знаю, что это работает, потому что возвращает токен.Я также попытался использовать неверный логин.и он возвращает 401 Unauthorized
Но когда я использую правильные учетные данные для входа в систему, которые находятся в базе данных.Возвращает токен
[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)
});
}
Затем следующая часть урока ограничивает доступ.Пользователь должен войти в систему в первую очередь для просмотра содержимого.
Ниже приведен код
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
};
});
Затем включен
app.UseAuthentication();
Я также включил [Authorize]
в контроллере значений
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
Это скриншот почтальона
Я следовал этому уроку.Я вставляю токен, полученный от логина.Но это дает мне ошибку
WWW-Authenticate →Bearer error="invalid_token", error_description="The audience is invalid"
Почему ошибка дает мне invalid token
, если токен от логина?Как это исправить?Я долго искал, но я не могу решить это сам.Спасибо.
Обновление:
Ошибка в том, что я забыл это
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,
ValidateAudience = false
};
});