Проверка фильтра авторизации не удалась webapi

Я пишу модульный тест для фильтра авторизации для проверки запроса/токена. Однако он возвращает ноль. не уверен, что не так.

https://programmium.wordpress.com/2020/04/30/unit-testing-custom-authorization-filter-in-net-core/

public class UserAuthorizationTests
{
    private readonly Mock<ILogger<UserAuthorizationFilter>> _mocklogger;
    private readonly Mock<IOptions<UserAuthorisationOptions>> _mockOption;
    public UserAuthorizationTests()
    {
         _mocklogger = new Mock<ILogger<UserAuthorizationFilter>>();
         _mockOption = new Mock<IOptions<UserAuthorisationOptions>>(); 
    }
    
    [Fact]
    public void UserAuthorizationTest()
    {
        var httpContextMock = new Mock<HttpContext>();
        httpContextMock.Setup(a => a.Request.Headers["UserAuthorization"]).Returns("test");
        
        ActionContext fakeActionContext =
            new ActionContext(httpContextMock.Object, 
                new Microsoft.AspNetCore.Routing.RouteData(), 
                new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor());            
            
        AuthorizationFilterContext fakeAuthFilterContext =
            new AuthorizationFilterContext(fakeActionContext, 
                new List<IFilterMetadata>());
        
        UserAuthorizationFilter userAuthorizationFilter = 
            new UserAuthorizationFilter(_mockOption.Object, _mocklogger.Object);
        userAuthorizationFilter.OnAuthorization(fakeAuthFilterContext);
        
        Assert.NotEqual(typeof(UnauthorizedResult), userAuthorizationFilter.GetType());
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы сказали «он возвращает ноль», может помочь, если бы вы могли описать это более четко

Я написал тест xunit, используя Moq, как показано ниже:

            var httpContextMock = new Mock<HttpContext>();
            httpContextMock.Setup(a => a.Request.Headers["Authorization"]).Returns("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiSmVmZmNreSIsIm5iZiI6MTY1MjA4NTg1NSwiZXhwIjoxNjUyMDg2MTU1LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjUwMDAiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjUwMDEifQ.cOpCN93U108Xr_km7GunxAJMrqx3LPnYAl3gLnXDW5M");            
            ActionContext fakeActionContext =new ActionContext(httpContextMock.Object,  new Microsoft.AspNetCore.Routing.RouteData(),
                                             new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor());
            JwksFilter jwksfilter = new JwksFilter();
            AuthorizationFilterContext fakeAuthFilterContext =new AuthorizationFilterContext(fakeActionContext, new List<IFilterMetadata>() {  }); 

            jwksfilter.OnAuthorization(fakeAuthFilterContext);    

            Assert.Equal(typeof(UnauthorizedResult), fakeAuthFilterContext.Result.GetType());

Коды в моем фильтре:

public void OnAuthorization(AuthorizationFilterContext context)
        {
            var jwks = context.HttpContext.Request.Headers["Authorization"].ToString();
            
            var validateParameters = new TokenValidationParameters() 
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("1234567890123456")),
                ValidateIssuer = true,
                ValidIssuer = "http://localhost:5000",
                ValidateAudience = true,
                ValidAudience = "http://localhost:5001",
                ValidateLifetime = true,
                ClockSkew = TimeSpan.FromMinutes(5)
            };
            var valiresult = ValidateToken(jwks, validateParameters);
            if (valiresult == false)
            {                   
                context.Result = new UnauthorizedResult();                   
            }
        }
        private static bool ValidateToken(string token, TokenValidationParameters validationParameters)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            try
            {
                tokenHandler.ValidateToken(token, validationParameters, out var validatedToken);
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

И результат:

Другие вопросы по теме