Мой токен недействителен в моем запросе на доступ, как мне это исправить?C#

Место общения программистов C#
Ответить
Гость
 Мой токен недействителен в моем запросе на доступ, как мне это исправить?

Сообщение Гость »


Я пытаюсь создать токен с логином для управления доступом. В настоящее время моя система генерирует ключ, я могу получить свой ключ, войдя в систему, затем я делаю запрос авторизованному контроллеру с ключом (с почтальоном). когда я это делаю, выдается ошибка недопустимого токена 401, и мой запрос на доступ не удается. Когда я проверяю ключ через JWT io, он содержит правильную информацию, а когда я применяю секрет, он отображается как проверенный.

Код: Выделить всё

namespace API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AuthenticationController : CustomBaseController
{
private readonly Jwt _jwtSettings;
private readonly IMapper _mapper;
private readonly IUserService _userService;
private readonly IRoleService _roleService;
public AuthenticationController(IOptions jwt, IMapper mapper, IUserService userService, IRoleService roleService)
{
_jwtSettings = jwt.Value;
_mapper = mapper;
_userService = userService;
_roleService = roleService;
}

[HttpPost("Login")]
public async Task Login([FromBody] UserLoginDto userLoginDto)
{
var userLogin = await _userService.GetUserForLoginAsync(userLoginDto.Username, userLoginDto.Password);

if (userLogin == null)
{
return Unauthorized("Kullanıcı bulunamadı! ");
}
var token = CreateToken(userLoginDto);
return Ok(token);

}

private string CreateToken(UserLoginDto userLoginDto)
{
if(_jwtSettings.Key == null) throw new Exception("Jwt ayarlarındaki key değeri boş olamaz");
var user = _userService.GetUserByUserNameAsync(userLoginDto.Username);
var roleName = _roleService.GetRoleNameByRoleId(user.Result.RoleId);
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.Key));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, userLoginDto.Username),
new Claim(ClaimTypes.Role, roleName)
};

var token = new JwtSecurityToken(_jwtSettings.Issuer, _jwtSettings.Audience,
claims,
expires: DateTime.Now.AddHours(1),
signingCredentials: credentials);

return new JwtSecurityTokenHandler().WriteToken(token);
}
}
}

Код: Выделить всё

        public async Task GetUserByUserNameAsync(string username)
{
return await _context.Users.SingleOrDefaultAsync(x => x.Username == username);
}

Код: Выделить всё

        public string GetRoleNameByRoleId(int roleId)
{
var role = _appDbContext.Roles.FirstOrDefault(r => r.RoleId == roleId);
return role?.RoleName;
}

Код: Выделить всё

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"] ?? string.Empty))
};
});

builder.Services.Configure(builder.Configuration.GetSection("Jwt"));
values such as issuer, audience in my json file match the decode information of JSON IO, and the username I use in the log in and the role it has also look correct in the decode, that is, the information I want processed to the key, but for some reason it is not available. how can I solve this situation?


Источник: https://stackoverflow.com/questions/781 ... o-i-fix-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»