Я хочу создать собственный атрибут авторизации для проверки пути и URL-адреса.Как создать настраиваемый атрибут авторизации для проверки роли и URL-адреса в Asp.Net Core?
Я нашел способ сделать это в ядре Asp.Net с использованием авторизации на основе политик, но я попытался реализовать его, но я не могу получить HttpContext с входящим URL.
AuthorizationHandlerContext
не имеет доступа к HttpContext вероятным.
Как я могу получить текущий HttpContext с URL-адресом? Можно ли это сделать или по-другому?
Я попробовал этот код для создания пользовательской политики:
public class RoleUrlValidationHandler : AuthorizationHandler<RoleUrlValidationRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RoleUrlValidationRequirement requirement)
{
var path = //Here I need get current url path for example - /api/posts/4545411
var pathPart = path.Split('/');
var clientId = pathPart[3];
if (context.User.IsInRole(clientId))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
Я хочу создать следующее:
[Authorize(Policy="RoleUrlValidation")] //Get ClientId from Url and check User's roles
public class PostsController : Controller
{
public ActionResult Get()
{
}
}
Frist Вы не должны реализовывать собственные атрибуты Autzorize. Правильный подход с Политикой. Во-вторых, вы можете использовать DI внутри обработчиков – Tseng
@Tseng Извините, что вы имеете в виду «не должны реализовывать собственные атрибуты Autzorize». и почему? –
@ b.ben: команда ASP.NET Core сделала определенные методы по методу 'AuthorizeAttribute' не виртуальными (или удалила их), означает, что вы больше не можете их переопределять (например, для работы с устаревшим ASP.NET). Они представили авторизацию на основе политики в качестве замены, поскольку ее более гибкие и более легкие для третьих сторон добавление новых политик, см. [Этот ответ] (https://stackoverflow.com/a/31465227/455493) от blowdart, разработчик, ответственный за ASP.NET Core security – Tseng