Я пытаюсь придумать простой API с ASP.NET Core и хотел бы ограничить доступ к некоторым конечным точкам на основе заголовка авторизации запроса.
В ASP.NET MVC5 я смог сделать это, унаследовав от AuthorizationFilterAttribute
и переопределив метод проверки, m примерно так:
public class BasicAuthorizationAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
try
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response = actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
var authorizationToken = Encoding.UTF8.GetString(Convert.FromBase64String(actionContext.Request.Headers.Authorization.Parameter)).Split(':');
var username = authorizationToken[0];
var password = authorizationToken[1];
if (SecurityHelper.Login(username, password))
{
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), null);
actionContext.RequestContext.Principal = Thread.CurrentPrincipal;
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
} catch
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
}
}
Но, как кажется, Coreиспользует совершенно другую систему авторизации, которая, кажется, требует гораздо больше кода, а установка не выглядит так, как будто она предназначена для проверки заголовков.Вся система Политики кажется слишком сложной для этого случая.Это то, что я должен использовать для этого случая?Или есть какая-то встроенная альтернатива для проверки базовой аутентификации?
Спасибо!