خواص IOptionsSnapshot<JwtBearerOptions> jwtBearerOptions تزریقی نال هستند. به صورت مستقیمی این مقادیر را از تنظیمات برنامه تامین کنید. در نهایت کدهای قبلی به صورت زیر تغییر میکنند:
public class TokenValidatorService : ITokenValidatorService { private readonly BearerTokensOptionsDto _configuration; public TokenValidatorService(IOptionsSnapshot<SiteSettingsDto> configuration) { if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } _configuration = configuration.Value?.BearerTokens ?? throw new ArgumentNullException(nameof(configuration)); } public async Task<bool> IsValidJwtAsync(string token) { var tokenHandler = new JwtSecurityTokenHandler(); try { var claimsPrincipal = tokenHandler.ValidateToken(token, new TokenValidationParameters { ValidIssuer = _configuration.Issuer, // site that makes the token ValidateIssuer = true, ValidAudience = _configuration.Audience, // site that consumes the token ValidateAudience = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration.Key)), ValidateIssuerSigningKey = true, // verify signature to avoid tampering ValidateLifetime = true, // validate the expiration ClockSkew = TimeSpan.Zero // tolerance for the expiration date }, out var securityToken); //var (success, _, _) = await IsValidClaimsPrincipalAsync(claimsPrincipal, securityToken); //return success; return true; } catch { return false; } } }