В настоящее время я пытаюсь использовать токен на предъявителя, и независимо от того, что я делаю, я получаю неавторизованную ошибку HTTP 401.
Я следую руководству по внедрению JWT, которое у меня есть метод расширения, который обрабатывает JWT.
public static class AuthenticationExtension
{
public static IServiceCollection AddTokenAuthentication(this IServiceCollection services, IConfiguration config)
{
var secret = config.GetSection("JwtConfig").GetSection("secret").Value;
var key = Encoding.ASCII.GetBytes(secret);
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false,
// ValidIssuer = "localhost",
//ValidAudience = "localhost"
};
});
return services;
}
}
Кроме того, вот как контроллер токена генерирует токен. Я должен получать значения из заголовка вместо электронной почты и пароля, например.
Поскольку этот код можно заменить, если он найден в коде, он не может этого сделать.
var token = jwt.GenerateSecurityToken("fake@email.com");
В моем StartUp.cs
у меня просто есть следующее, чтобы добавить промежуточное ПО в мою конфигурацию. В разделе услуг я провожу тест
services.AddTokenAuthentication(Configuration);
Но, как вы видите, я получаю неавторизованный HTTP 401.
Это это код из API / маркера контроллера.
[Route("api/[controller]")]
[ApiController]
public class TokenController : ControllerBase
{
private IConfiguration _config;
public TokenController(IConfiguration config)
{
_config = config;
}
[HttpGet]
public string GetRandomToken()
{
var jwt = new JwtService(_config);
var token = jwt.GenerateSecurityToken("fake@email.com");
return token;
}
}
токен из апи / лексема
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZha2VAZW1haWwuY29tIiwibmJmIjoxNTg2NjMzMTkwLCJleHAiOjE1ODY3MTk1OTAsImlhdCI6MTU4NjYzMzE5MH0.SPSErcPpD4f48sWFYQFVUBmTaVtCW8oDw4Np6Tncozo
Это мой appSettings.json
config Я, конечно, изменю свой секрет, как только получу эту настройку.
Достаточно ли этого для защиты API или вы также должны использовать идентификатор клиента и секрет с точки зрения API-уровня. Стиль HMA C.
"JwtConfig": {
"secret": "PDv7DrqznYL6nv7DrqzjnQYO9JxIsWdcjnQYL6nu0f",
"expirationInMinutes": 1440
},