Авторизуйтесь по определенной схеме в ASP.NET MVC 4 - PullRequest
0 голосов
/ 15 октября 2019

Есть ли способ требовать конкретную схему авторизации при использовании атрибута [Authorize] на контроллере в asp.net MVC 4?

Я ожидал что-то подобное (чтополностью возможно в .net core btw)

[Authorize(AuthenticationSchemes = "Bearer")]
public class MyController : Controller { }

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Как предложил @Chetan Ranpariya в комментариях, я в итоге реализовал производный атрибут (из AuthorizeAttribute). Согласно документации , способ сделать это - переопределить метод AuthroizeCore.

При переопределении предоставляет точку входа для пользовательских проверок полномочий.

Вот рабочий пример для дальнейшего использования

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    public string AuthSchemes { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (this.AuthSchemes != null)
        {
            string scheme = httpContext?.User?.Identity?.AuthenticationType;
            if (string.IsNullOrWhiteSpace(scheme))
            {
                return false;
            }

            return this.AuthSchemes.Split(',').Contains(scheme);
        }

        return base.AuthorizeCore(httpContext);
    }
}

Атрибут можно использовать так

[MyAuthorize(AuthSchemes = CookieAuthenticationDefaults.AuthenticationType)]
public class MyController : Controller { }
0 голосов
/ 15 октября 2019

Насколько я знаю, из коробки нет ничего, что позволило бы вам написать это.
Стандартный атрибут авторизации не поддерживает это.

Но вы можете написать свой собственный атрибути проверьте требования удостоверения личности, поступающей. Я использовал бэкпорт политик авторизации ASP.NET Core для .NET Full framework: https://github.com/DavidParks8/Owin-Authorization, чтобы написать такие правила.

Как проверить, что вы пришлис какого токена? Обычно вы увидите претензию, похожую на «idp»: «oidc»

Как получить претензии? ((ClaimsPrinciple) Пользователь). Заявки (в коде контроллера)

...