Как передать пользовательский аргумент в политику авторизации - PullRequest
0 голосов
/ 03 июня 2019

Мне нужен собственный атрибут для моего остального API в ядре asp.net MVC. Я хочу добавить этот атрибут по желанию в некоторые из моих API. Этот атрибут проверяет, доступен ли API для пользователя или нет на основании какого-либо условия, и выдает 403, если он недоступен. Для этого я использовал фильтры, и проблема с фильтром заключается в том, что код фильтра выполняется независимо от того, добавлен атрибут или нет в мой API. Я хотел бы, чтобы мой код фильтра выполнялся только при добавлении этого атрибута в API.
Мой коллега предложил мне использовать политику авторизации вместо фильтров для этого варианта использования. Политики выполняются только тогда, когда они добавлены в API. Кроме того, поскольку я выбрасываю 403, политика авторизации является лучшим кандидатом. Я исследовал политику авторизации, но моя проблема в том, что я не могу передать пользовательские атрибуты в Политику авторизации.

Например, я смог сделать это с помощью фильтров и пользовательских атрибутов.

[MyCustomFeature("param1", "param2")]

Как я могу сделать то же самое в политике авторизации? Я использую этот пример для политики авторизации. Пользовательский атрибут авторизации asp.net core

1 Ответ

1 голос
/ 03 июня 2019

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

Суть в том, что независимо от того, как вы подключаетесь к системе аутентификации на основе политик, политика всегда разрешается с помощью одной строки.Итак, чтобы получить то, что вы хотите, вам необходимо:

  • Реализовать пользовательский атрибут, который подклассов AuthorizeAttribute и принимает аргументы, которые вы передаете, и использует их для генерации строки имени политики.Внимательно прочитайте пример «Пользовательские атрибуты авторизации» на странице связанных документов, посмотрите, как он на самом деле хранит значение «Возраст» в строке политики.
  • Реализация и регистрация пользовательского IAuthorizationPolicyProvider, который может интерпретировать строки, сгенерированныесвой собственный атрибут и сгенерируйте соответствующую политику на лету.

Там нет тонны кода, и это не супер сложный, но немного странно / неловко, что сводится к тому, чтобы положить вещи встрока.

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