170 похожих чатов

С бодрым. Есть ASP .NET Core 6-ой, Web API. Хочу реализовать

авторизацию в API'шке, без аутентификации (мне в целом всё равно кто авторизуется, но я хочу в случае чего отозвать доступ). Как хочу авторизовывать - проверить, что токен в Authorization-хедере содержит нужный мне идентификатор.
Звучит, конечно, как необходимость завести одного-единственного юзера, дать ему необходимые доступы и т.д. Но я не хочу усложнять: кастомные requirement, claim'ы - выглядит слишком сложновато для моей задачи.

https://stackoverflow.com/questions/31464359/how-do-you-create-a-custom-authorizeattribute-in-asp-net-core

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-6.0

Как я прочитал по ссылкам выше, мне нужно использовать политики - без вариантов.

Думал отделаться малой кровью. Вижу у AuthorizationPolicyBuilder метод RequireAssertion. Глянул AuthorizationHandlerContext на MSDN - похоже мне это тоже не поможет.

Вопросы:
1. Возможно ли без пользователей/ролей/etc, средствами AuthorizationMiddleware, добиться того, что я хочу - авторизовать любой запрос, если есть нужное значение в хедере?
2. Обязательно ли использовать AuthenticationMiddleware при авторизации? Я убрал из main-а код app.UseAuthentication();, но всё равно получаю ошибку, что не добавил хендлер аутентификации (см. скрин).

Предложили в фиолетовом TypeFilterAttribute, но я пока не понял как его применить. Может у кого есть ещё варианты?

13 ответов

30 просмотров

2 - да

если ты хочешь просто значение в хедере проверить, то мб свою мидлварю и напишешь, которая это чекает?

1 - это немного ортогональная вещь

Konstantin-Redkin Автор вопроса
βλαδιμιρ
если ты хочешь просто значение в хедере проверить,...

Думал о таком. Но я хочу в случае чего поменять политику, а с ней и способ авторизации. Потому что вариант "один токен - все запросы" лишь на время MVP.

βλαδιμιρ
если ты хочешь просто значение в хедере проверить,...

Мне таких мидлварей примерно в 50 бинарников напихали, размазанных по +- 20 репозиториям, второй год хожу выпиливаю

Konstantin-Redkin Автор вопроса
Roman Bukin
2 - да

Тогда почему не объединили UseAuthorization и UseAuthentication в одну сущность? Если получается одно без другого не очень-то и работает.

βλαδιμιρ
если ты хочешь просто значение в хедере проверить,...

За такие советы могу сжечь на костре свящённым огнём свидетелей секты драматического отличия аутентификации от авторизации

Konstantin Redkin
Тогда почему не объединили UseAuthorization и UseA...

Потому что у тебя может быть воткнута UseAuthentication, а следом мидлвара, которая смотрит в HttpContext.User и если у тебя скажем не пройдена 2FA - отправляет тебя принудительно её проходить, не давая ничего сделать

Roman Bukin
За такие советы могу сжечь на костре свящённым огн...

Ну если ему реально просто хочется различать анонимуса от доверенного человека (которому он дал хедер)

Roman Bukin
Потому что у тебя может быть воткнута UseAuthentic...

А уже следом авторизация с дефолтной политикой которая на логин отправляет, допустим

Konstantin-Redkin Автор вопроса
Roman Bukin
А уже следом авторизация с дефолтной политикой кот...

Тут не понял. "Следом авторизация" - всё ещё требует UseAuthorization, нет?

βλαδιμιρ
Ну если ему реально просто хочется различать анони...

Ну у нас всё так же начиналось, а теперь моя жизнь - это бесконечная выплата чужого техдолга по причине того что кто-то когда-то не осилил документацию

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта