У меня проблемы с ядром dotnet с проверкой JWT.
Я создал собственный валидатор, вместо проверки токена, он будет перенаправлен в другой API и вернет токен.Это работает отлично, однако я продолжаю получать ответ: неавторизован.
Это мой валидатор, довольно простой, он проверяет токен, если он получает ответ, он должен быть в порядке.
public class JwtValidator : ISecurityTokenValidator
{
AuthenticationClient authClient;
public JwtValidator(AuthenticationClient authClient)
{
this.authClient = authClient;
}
public bool CanValidateToken => true;
public int MaximumTokenSizeInBytes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public bool CanReadToken(string securityToken)
{
return true;
}
public ClaimsPrincipal ValidateToken(string securityToken, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
{
validatedToken = null;
//your logic here
var response = authClient.Validate(securityToken);
//assuming response will contain info about the user
if (response == null)
throw new SecurityTokenException("invalid");
validatedToken = response.Result;
return new ClaimsPrincipal(new ClaimsIdentity(response.Result.Claims));
}
Не выдается исключение, токен действителен, претензии возвращаются.
В Startup.cs у меня есть следующий код:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new JwtValidator(authClient));
});
Когда я добавляю логирование вJwtValidator Я получаю логи, поэтому функция, кажется, вызывается правильно.Но API продолжает возвращаться «Не авторизовано».