自定义SecurityTokenValidator可以运行,但仍未经授权

时间:2019-02-12 11:25:17

标签: c# authentication .net-core jwt

我在JWT验证的dotnet内核中遇到了一些麻烦。

我创建了一个自定义验证器,而不是验证令牌,它将转发到另一个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始终返回“未经授权”。

0 个答案:

没有答案