У меня есть некоторые проблемы при изучении 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), просто проверьте ключ.если ключ в порядке -> вернуться к методу