|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
Привет. Мне необходимо в Middleware проверять наличие IAllowAnonimous фильтра у вызываемого роута. Как это можно сделать ? Пробовал через Код: c# 1.
но там его не оказалось почему-то. Также думал выйти на него через Код: c# 1.
с последующим поисков в этом списке, но также не нашел. Как это можно решить ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 12:02 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
WaspNewCore, В middleware атрибуты действий и контроллеров недоступны, так как они действуют в middleware, реализующим MVC, соответственно ни до, ни после -- их нет, так как в middleware нет ни контроллеров, ни действий, это лишь абстракции паттерна. Все операции, которые вы хотите внедрить в работу MVC pipeline делаются фильтрами , а не middleware. Если вы расскажите, чего вы в конечном счёте хотите, может быть найдём решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 13:09 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
Спасибо, что откликнулись. Хочу сделать следующее: В Header задается некий кастомный аттрибут - строковый ID. Он считывается отдельным Middlewar'ов и записывается в scoped сервис как константа. Этот сервис потом инжектится в репозитории, и служит неким глобальным фильтром в условии where. Он не привязан к юзеру. Юзер в начале работы выбирает этот scoup и в нем работает. При этом, если этого аттрибута в хэдере нету, то вываливается ошибка 401. Это некое подобие роли или некий код Area, в которой работает юзер в данной сессии. Даный функционал переделать нельзя - не получится перенести его куда-то в профиль юзера или еще что-то. Т.е. исходные данные таковы, а дальше я уже могу работать. Я хочу сделать кастомный аттрибут [NoId], который должен отслеживаться Middleware'ом и при его наличии он не должен пытаться считать его из Header . Даже если он есть (случайно пришел или не случайно). Соответственно не должен пытаться протолкнуть его в scoped сервис, который будут дальше использовать. Получается некий аналог аттрибута AllowAnoimous. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 13:26 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
В принципе, может сделать это через фильтр ? Чтобы фильтр считывал хэдер и записывал его куда нужно. А еще сделать NotFilter (его антипод), который бы игнорировал этот хэдер. При этом сконфигурировать, чтобы основной фиьтр применялся по умолчанию ко всем методам. Соответсвенно его антипод будет нейтрализовывать наличие первого. Вот только как это сделать, чтобы фильтр антипод отключал работу основного ? Наверное в основном можно, таки, получить доступ к примененным фильтрам (то, что я и хотел сделать изначально) и просто ничего не делать при наличии фильтр антипода ? Т.е. фильтр антипод выступает в роли маркерного интерфейса. так ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 13:36 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
WaspNewCore, Вам нужно сделать свой фильтр авторизации, который авторизует или нет пользователя глядя на заголовок запроса. Но учтите, что пользователь может подсунуть любой хедер, какой пожелает, поэтому безопасность таки должна делаться в момент авторизации, записываться в тикет, а не аналог аноимус юзер, это фигня. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 15:01 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreЭтот сервис потом инжектится в репозитории, и служит неким глобальным фильтром в условии where.репо самописка? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 15:01 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVosttсвой фильтр авторизации, который авторизует или нет пользователя глядя на заголовок запроса И бросать его на действия или контроллеры. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 15:01 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVosttWaspNewCore, Вам нужно сделать свой фильтр авторизации, который авторизует или нет пользователя глядя на заголовок запроса. Но учтите, что пользователь может подсунуть любой хедер, какой пожелает, поэтому безопасность таки должна делаться в момент авторизации, записываться в тикет, а не аналог аноимус юзер, это фигня. Там есть уже хорошая авторизация с блекжеком. Данный аттрибут в хэдере чисто визуальщина, пожелание от менеджеров проекта руководства ) Petro123, Да простенький репо. Чисто для инжекции. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 10:17 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreСпасибо, что откликнулись. Хочу сделать следующее: В Header задается некий кастомный аттрибут - строковый ID. Он считывается отдельным Middlewar'ов и записывается в scoped сервис как константа. Этот сервис потом инжектится в репозитории, и служит неким глобальным фильтром в условии where. Он не привязан к юзеру. Юзер в начале работы выбирает этот scoup и в нем работает. При этом, если этого аттрибута в хэдере нету, то вываливается ошибка 401. Это некое подобие роли или некий код Area, в которой работает юзер в данной сессии. Даный функционал переделать нельзя - не получится перенести его куда-то в профиль юзера или еще что-то. Т.е. исходные данные таковы, а дальше я уже могу работать. Я хочу сделать кастомный аттрибут [NoId], который должен отслеживаться Middleware'ом и при его наличии он не должен пытаться считать его из Header . Даже если он есть (случайно пришел или не случайно). Соответственно не должен пытаться протолкнуть его в scoped сервис, который будут дальше использовать. Получается некий аналог аттрибута AllowAnoimous. Не понял при чём тут аттрибут AllowAnoimous. "В Header задается некий кастомный аттрибут - строковый ID. Он считывается отдельным Middlewar'ов и записывается в scoped сервис как константа." - то есть работа ведётся в контексте некого ID, что пишется в сервис. Дак и расширте этот свой сервис свойствам IsAnonymous и используйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 10:31 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
И кстати не понятно зачем тут вообще middleware? В конструктор этого Вашего сервиса заинжектить IHttpContextAccessor и пусть он сам достаёт нужные ему кастомные атрибуты. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 10:36 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
skyANAВ конструктор этого Вашего сервиса заинжектить IHttpContextAccessor и пусть он сам достаёт нужные ему кастомные атрибуты. Он там их не достанет. Контроллеры, действия, области -- это область действия MVC, аспекты доступны только в фильтрах MVC, но никак через HttpContext. Максимум, можно поковыряться в RouteData и извлечь там имена контроллеров. Можно конечно поковырять типы и самому извлечь атрибуты, но это полный трешак, так делать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 11:49 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreТам есть уже хорошая авторизация с блекжеком. Данный аттрибут в хэдере чисто визуальщина, пожелание от менеджеров проекта руководства ) В общем, фильтры делаете, авторизации, или на действия, там делайте что хотите. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 11:50 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
Типа того: Код: c# 1. 2. 3. 4. 5. 6.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 12:01 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVosttWaspNewCoreТам есть уже хорошая авторизация с блекжеком. Данный аттрибут в хэдере чисто визуальщина, пожелание от менеджеров проекта руководства ) В общем, фильтры делаете, авторизации, или на действия, там делайте что хотите. А вот это? Конвейер или как правильно термин? https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.1&tabs=aspnetcore2x ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 12:03 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVosttskyANAВ конструктор этого Вашего сервиса заинжектить IHttpContextAccessor и пусть он сам достаёт нужные ему кастомные атрибуты. Он там их не достанет... Почему не достанет? Я так понял, что передаётся некий кастомный заголовок в запросе, что определяет роль пользователя. И нужно выбирать данные в контексте данной роли. Пример выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 12:04 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
skyANAПочему не достанет? Я так понял, что передаётся некий кастомный заголовок в запросе, что определяет роль пользователя. И нужно выбирать данные в контексте данной роли. Пример выше. Ты кажись вообще ничего не понял Речь идёт не о том, как достать заголовок, а как проверить, есть ли у текущего действия или контроллера атрибут [AllowAnonymous]. В middleware. А ты предложил какую-то обёртку, чтобы достать значения хедеров. Честно говоря, здесь бы подошло пару методов расширения для HttpContext, зачем вот это вот городить? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 12:35 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
skyANA, WaspNewCoreЯ хочу сделать кастомный аттрибут [NoId], который должен отслеживаться Middleware'ом и при его наличии он не должен пытаться считать его из Header . Даже если он есть (случайно пришел или не случайно). Соответственно не должен пытаться протолкнуть его в scoped сервис, который будут дальше использовать. Т.е. он уже решил задачу пихать свой ID из хедеров в скоуп. А теперь как сделать, чтобы на некоторых маршрутах его игнорировать с помощью атрибута. Под маршрутом понимается действие контроллера, так как только там можно применить атрибут, как аспект действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 12:39 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVostt, читаем выделенное: WaspNewCoreСпасибо, что откликнулись. Хочу сделать следующее: В Header задается некий кастомный аттрибут - строковый ID . Он считывается отдельным Middlewar'ов и записывается в scoped сервис как константа . Этот сервис потом инжектится в репозитории, и служит неким глобальным фильтром в условии where. Он не привязан к юзеру. Юзер в начале работы выбирает этот scoup и в нем работает. При этом, если этого аттрибута в хэдере нету, то вываливается ошибка 401. Это некое подобие роли или некий код Area, в которой работает юзер в данной сессии. Даный функционал переделать нельзя - не получится перенести его куда-то в профиль юзера или еще что-то. Т.е. исходные данные таковы, а дальше я уже могу работать. Я хочу сделать кастомный аттрибут [NoId], который должен отслеживаться Middleware'ом и при его наличии он не должен пытаться считать его из Header . Даже если он есть (случайно пришел или не случайно). Соответственно не должен пытаться протолкнуть его в scoped сервис, который будут дальше использовать. Получается некий аналог аттрибута AllowAnoimous. Объясни, что такое Header? Что такое кастомный атрибут - строковый ID? Раз ты до конца понял автора ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 13:30 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
Он походу одними и теми же терминами называет разные вещи Но не суть. Моя идея в том, что если уж сейчас вызывающая сторона определяет контекст, передавая заголовки, то пусть она и продолжает это делать. То есть типа если я дёргаю этот url из-под админа, то сервис отдаёт мне данные без лишних фильтров. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 13:41 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
skyANAОбъясни, что такое Header? Что такое кастомный атрибут - строковый ID? Раз ты до конца понял автора Да вроде понятно. Он хочет при наличии атрибута [NoId] игнорировать какую-то фигню из Header. Доступ к атрибуту из middleware он получить не может, это само собой разумеется, так как его нужно реализовывать в виде фильтра инфраструктуры MVC. А что такое "кастомный аттрибут -- строковый ID" это какая-то фигня, которая задаётся в хедерах. Т.е. когда я просил озвучить конечную задачу, автор озвучил вместо этого потроха реализации, как он это понимает. skyANAМоя идея в том, что если уж сейчас вызывающая сторона определяет контекст, передавая заголовки, то пусть она и продолжает это делать. Эмм.. заголовками? Или типа &ignoreAuthFilter=true ? skyANAТо есть типа если я дёргаю этот url из-под админа, то сервис отдаёт мне данные без лишних фильтров. Вообще, это вопрос авторизации, а не каких-то заголовков. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 14:11 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVostt, я так понял, что в заголовке передаётся параметр, что определяет из под какой роли дёргается сервис если не передали, то 401 Unauthorized по идее надо завести некую супер-пупер роль, которой данные отдавать без ограничений а он почему-то хочет и текущий механизм оставить, и сбоку костыль прикрутить ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 14:28 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVosttВообще, это вопрос авторизации, а не каких-то заголовков. Слушай, если запихать в Authorization заголовок JWT Token, то у тебя вопросов думаю не возникнет. А вот они сделали свою кастомщину ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 14:31 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
hVostt меня понял верно. Благодаря объяснению, что аттрибуты применяемые к контроллерам обрабатываются MVC мидлваром и не имеют смысла для других мидлваров, в голове все встало на свои места. Переписываю на IAsyncResourceFilter, вроде получается. Ничего сложного. Просто не туда копал изначально. Можно закрывать тему :) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 16:03 |
|
AspNetCore. Как в Middleware узнать наличие фильтра у вызываемого метода ?
|
|||
---|---|---|---|
#18+
skyANAя так понял, что в заголовке передаётся параметр, что определяет из под какой роли дёргается сервис если не передали, то 401 Unauthorized Честно говоря, даже с твоим объяснением, конечную задачу я не совсем понимаю :) skyANAпо идее надо завести некую супер-пупер роль, которой данные отдавать без ограничений а он почему-то хочет и текущий механизм оставить, и сбоку костыль прикрутить Или входить с определённым Claim, на которых можно строить свои политики и рулить атрибутами. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 22:33 |
|
|
start [/forum/topic.php?fid=18&msg=39672281&tid=1355181]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
127ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 248ms |
0 / 0 |