Web Api net core 2.0 OnAuthorization (собственный атрибут) возвращает 500 - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть некоторые проблемы при изучении Web Api на Net Core 2.0. Я написал свой собственный атрибут авторизации

  public class BasicAuthAttribute : AuthorizeAttribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var actionContext = context.HttpContext;
            var authService = BasicController.GetService<IAuthenticationService>();
            var authKey = actionContext.Request.Headers["Authorization"].ToString();

            if (authKey == string.Empty || !authService.ApiKeyProperly(authKey))
            {
                actionContext.Response.Redirect("~/unathorized.html");
            }
        }
    }

, и я использую его в некоторых действиях:

 public class UsersController : BasicController
    {
        [BasicAuth]
        [HttpGet]
        public IActionResult Get()
        {
            IUsersService usersService = GetService<IUsersService>();
            var users = usersService.QueryUsers().ToArray();
            return Ok(users);
        }
}

Мой authService проверяет, правильно ли ключ и при отладке я перехожу к последней строке BasicAuthAttributeClass (авторизация была в порядке), но когда я нажимаю «продолжить», я получаю 500, кроме того, возвращаюсь к ma UserController.Он не переходит в метод GET после выхода из класса атрибутов.

Что я сделал не так?Я что-то упускаю?

Я получаю сообщение об ошибке:

InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found

но какую схему мне добавить?если я сделаю в своем Startup.cs (WebApi)

services.AddAuthentication();

, что я должен поставить здесь?я не хочу использовать какие-либо куки и т. д. Я просто хочу изменить поведение моих методов - если у него есть атрибут (basicauth), просто проверьте ключ.если ключ в порядке -> вернуться к методу

1 Ответ

0 голосов
/ 07 апреля 2019

Я сделал некрасивый, но для меня удовлетворительный результат;)

 public class BasicAuthAttribute :Attribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var actionContext = context.HttpContext;
            var authService = BasicController.GetService<IAuthenticationService>();
            var authKey = actionContext.Request.Headers["Authorization"].ToString();

            if (authKey == string.Empty || !authService.ApiKeyProperly(authKey))
            {
                context.Result = new UnauthorizedResult();
            }

        }
    }

, поэтому я не использую AuthorizeAttribute, но я наследую от Atrribute а потом если context.result получит какой-то результат никакое действие не будет вызвано после выхода из метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...