Атрибут CustomAuth максимально простой - PullRequest
0 голосов
/ 04 мая 2019

Я хотел протестировать очень простой аутентификационный слой

 public class CustomAuth : AuthorizeAttribute, IAuthorizationFilter
{

    public CustomAuth()
    {
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var cookies = context.HttpContext.Request.Cookies;

        var ok = cookies["Auth0"] == "asdf";
        if (!ok)
        {
            context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
            return;
        }
    }
}

[CustomAuth]
public IActionResult Index()
{
    return View();
}

И когда нет файла cookie с именем Auth0 со значением asdf, тогда все работает нормально, но когда я добавляю его, тогда No authenticationScheme was specified, and there was no DefaultChallengeScheme found.

Я попытался установить context.Result = ...;, например, new OkResult() или RedirectToActionResult, и это сработало, но я просто хочу позволить ему перейти прямо к этому Index вместо того, чтобы переместить все из этого действия в этот OnAuthorization метод

как мне этого добиться?

1 Ответ

0 голосов
/ 06 мая 2019

Для CustomAuth наследуется от AuthorizeAttribute.Промежуточное ПО аутентификации проверит идентичность по схеме аутентификации по умолчанию.

Если вы предпочитаете перейти на Index без настройки какой-либо аутентификации, вы можете попробовать изменить AuthorizeAttribute на Attribute как

public class CustomAuth : Attribute, IAuthorizationFilter
{

    public CustomAuth()
    {
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var cookies = context.HttpContext.Request.Cookies;

        var ok = cookies["Auth0"] == "asdf";
        if (!ok)
        {
            context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
            return;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...