Пользовательский SecurityTokenValidator работает, но все еще не авторизован - PullRequest
0 голосов
/ 12 февраля 2019

У меня проблемы с ядром 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 продолжает возвращаться «Не авторизовано».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...