Аутентификация не удалась: метод не найденC#

Место общения программистов C#
Ответить
Anonymous
 Аутентификация не удалась: метод не найден

Сообщение Anonymous »

Я разрабатываю часть авторизации JWT в моем API, и я продолжаю проблему, в которой в соответствии с стеком исключений, который я получаю, заголовок не может быть декодирован. Я получаю следующие исключения: < /p>
[Authentication failed]
[1º] Method not found: 'Void Microsoft.IdentityModel.Tokens.Base64UrlEncoder.Decode(System.ReadOnlySpan`1, System.Span`1)'.

[2º] IDX14102: Unable to decode the header '[PII of type 'Microsoft.IdentityModel.Logging.SecurityArtifact' is hidden. For more details, see https://aka.ms/IdentityModel/PII.]' as Base64Url encoded string.
< /code>
Я проверил свои версии пакета, они перечислены ниже.
Я проверил и повторно проверил свой запрос.
Я передаю авторизацию: носитель в моем Заголовок. < /p>
Я не нашел замену для декодирующей части и не знаю, как следует сделать. < /p>
Любая помощь в этом очень ценится. /p>
Это служба для генерации моих токенов: < /p>
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Vestis.Configurations;

namespace Vestis.Services;

public class JwtService
{
private readonly JwtSettings _jwtSettings;

public JwtService(JwtSettings jwtSettings)
{
_jwtSettings = jwtSettings;
}

public string GenerateToken(string userId, string userEmail)
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.SecretKey));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var claims = new List
{
new Claim(JwtRegisteredClaimNames.Sub, userId),
new Claim(JwtRegisteredClaimNames.Email, userEmail),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};

var token = new JwtSecurityToken(
issuer: _jwtSettings.Issuer,
audience: _jwtSettings.Audience,
claims: claims,
expires: DateTime.UtcNow.AddMinutes(_jwtSettings.ExpirationInMinutes),
signingCredentials: credentials
);

var tokenString = new JwtSecurityTokenHandler().WriteToken(token);

//For debbuging purposes
Console.WriteLine($"Generated JWT Token:\n{tokenString}");

return tokenString;
}
}
< /code>
И это моя настройка программы для jwt: < /p>

void ConfigureJWT()
{
var jwtSettings = new JwtSettings();
builder.Configuration.GetSection("JwtSettings").Bind(jwtSettings);
builder.Services.AddSingleton(jwtSettings);

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.SecretKey));

builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtSettings.Issuer,
ValidAudience = jwtSettings.Audience,
IssuerSigningKey = key
};
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
Console.WriteLine("[Authentication failed]\n" + PrintExceptionStack(context.Exception,out _));
return Task.CompletedTask;
},
OnTokenValidated = context =>
{
Console.WriteLine("[Token validated]\n" + context.SecurityToken);
return Task.CompletedTask;
}
};
});
builder.Services.AddAuthorization();
}
< /code>
Для ссылки это текущие версии пакетов, которые я использую, (я вижу, что Microsoft.identitymodel.tokens - 1 основная версия, однако это последняя версия). Все пакеты находятся в их последних версиях: < /p>







all
runtime; build; native; contentfiles; analyzers; buildtransitive






Подробнее здесь: https://stackoverflow.com/questions/794 ... -not-found
Ответить

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

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

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

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

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