авторизацию в 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, но я пока не понял как его применить. Может у кого есть ещё варианты?
2 - да
если ты хочешь просто значение в хедере проверить, то мб свою мидлварю и напишешь, которая это чекает?
1 - это немного ортогональная вещь
Думал о таком. Но я хочу в случае чего поменять политику, а с ней и способ авторизации. Потому что вариант "один токен - все запросы" лишь на время MVP.
Мне таких мидлварей примерно в 50 бинарников напихали, размазанных по +- 20 репозиториям, второй год хожу выпиливаю
Тогда почему не объединили UseAuthorization и UseAuthentication в одну сущность? Если получается одно без другого не очень-то и работает.
За такие советы могу сжечь на костре свящённым огнём свидетелей секты драматического отличия аутентификации от авторизации
Потому что у тебя может быть воткнута UseAuthentication, а следом мидлвара, которая смотрит в HttpContext.User и если у тебя скажем не пройдена 2FA - отправляет тебя принудительно её проходить, не давая ничего сделать
Ну если ему реально просто хочется различать анонимуса от доверенного человека (которому он дал хедер)
А уже следом авторизация с дефолтной политикой которая на логин отправляет, допустим
Тут не понял. "Следом авторизация" - всё ещё требует UseAuthorization, нет?
Ну у нас всё так же начиналось, а теперь моя жизнь - это бесконечная выплата чужого техдолга по причине того что кто-то когда-то не осилил документацию
Втыкай оба два и не переживай по поводу
Обсуждают сегодня