Я разрабатываю часть авторизации JWT, и я сталкиваюсь с проблемой, в которой в соответствии со стеком исключений, который я получаю, заголовок не может быть декодирован. Microsoft.identitymodel.tokens.base64urlencoder.decode (System.ReadonlySpan1, System.Span 1) '.
[2º] idx14102: Невозможно расшифровать заголовок' [pii типа 'microsoft.identitymodel.logging.securityArtifact' скрыт. Для получения более подробной информации см. Https://aka.ms/identitymodel/pii.] 'As base64url кодированная строка. Я протестировал и повторно проверил свой запрос. Токены: < /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 debugging 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();
}
Для ссылки это текущие версии пакетов, которые я использую (я вижу, что Microsoft.identitymodel.tokens - 1 основная версия, однако это последняя версия). Все пакеты находятся в их последних версиях: < /p>
all
runtime; build; native; contentfiles; analyzers; buildtransitive
Подробнее здесь: https://stackoverflow.com/questions/794 ... -not-found
Аутентификация не удалась: метод не найден ⇐ C#
Место общения программистов C#
-
Anonymous
1751827412
Anonymous
Я разрабатываю часть авторизации JWT, и я сталкиваюсь с проблемой, в которой в соответствии со стеком исключений, который я получаю, заголовок не может быть декодирован. Microsoft.identitymodel.tokens.base64urlencoder.decode (System.ReadonlySpan1, System.Span 1) '.
[2º] idx14102: Невозможно расшифровать заголовок' [pii типа 'microsoft.identitymodel.logging.securityArtifact' скрыт. Для получения более подробной информации см. Https://aka.ms/identitymodel/pii.] 'As base64url кодированная строка. Я протестировал и повторно проверил свой запрос. Токены: < /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 debugging 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();
}
Для ссылки это текущие версии пакетов, которые я использую (я вижу, что Microsoft.identitymodel.tokens - 1 основная версия, однако это последняя версия). Все пакеты находятся в их последних версиях: < /p>
all
runtime; build; native; contentfiles; analyzers; buildtransitive
Подробнее здесь: [url]https://stackoverflow.com/questions/79440613/authentication-failed-method-not-found[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия