The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Релиз унифицированной платформы .NET 5 с поддержкой Linux и WebAssembly"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Присылайте удачные настройки в раздел примеров файлов конфигурации на WIKI.opennet.ru.
. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..." +/
Сообщение от Аноним (162), 14-Ноя-20, 06:35 
Я не понимаю ваше непонимание...

Начнем с конца, семантически вот такая строка:
public class AuthenticationTypeRequirement : IAuthorizationRequirement
означает, что класс реализует интерфейс. В документации интерфейса и он пустой, но есть перечень его имплементаций... Что нет так-то? Могу лишь догадываться... возможно вас удивило, что интерфейс IAuthorizationRequirement абстрактен настолько, что не требует имплементации полей... Ну так это ничего страшного.

Вы в своем коде показали регистрацию двух политик авторизации. Причем политика авторизации применяется в зависимости от типа аутентификации. Для этого и существует ваш класс AuthenticationTypeRequirement. Вот только вы не показали самое интересное, как вы удовлетворяете это условие. Где-то там у вас должен быть класс-хэндлер примерно такого вида:
public class AuthenticationTypeHandler : AuthorizationHandler<AuthenticationTypeRequirement>
AuthenticationTypeHandler - это я навскидку придумал =)
Судя по передаваемым названиям есть подозрение, что вы это из IdentityUserLogin.LoginProvider берёте и сличаете или из HttpContext.User.Identity.AuthenticationType. Без кода хэндлера это гадание.

Но это я так... давайте лучше разбираться в том что вообще такое AuthenticationType и зачем в это поле присваиваются строки. Там много причин, на самом деле... Ну вот давайте представим себе например мультитеннантное приложение. Есть ваша аутентификация, а есть теннанты пользователей, на которых нужно дать возможность или отобрать возможность аутентифицировать пользователей через внешнего провайдера аутентификации типа Google, Facebook, VK или вообще у клиента свой OAuth2. Вопрос: как сделать single sign out в рамках теннанта, когда админиcтратор теннанта резко выключил Facebook? Только чур не на всё ваше приложение, а только конкретному клиенту и только фейсбук... Очевидно что для этого нужно вести учет теннантов и типов приложений. И нужен уникальный идентификатор типа аутентификации. Ну вот примерно что делает эта строка. Обратите внимание, это безотносительно кода выше.

Далее давайте подумаем абстрактно. А если у меня наоборот вообще нет не то что мультитенантных приложений, но даже ни одной жалкой федерации нету? Ну очевидно, что это поле должно показать это явным образом. Ну вот для этого и придумана константа "Identity.Application", которая, по сути, признак локальной аутентификации.

Константа-строка "Identity.Application" много где упоминается в документации при работе с cookies, главное понимать, что в этой связи это уникальный идентификатор провайдера аутентификации и технически её можно отловить в хендлере. Странно, что вопросы по ней, а не про "AuthenticationTypes.Federation", которая скрывает реального провайдера аутентификации при использовании JWT ввиду технических ограничений...

Так-то я не понимаю в этих ваших дотнетах, поэтому не удивляюсь как так вы пишете что вам нужно и по JWT и по кукам, вроде бы одновременно, а по факту проводите дифференциацию на уровне политик авторизации. Такое себе...

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Релиз унифицированной платформы .NET 5 с поддержкой Linux и WebAssembly, opennews, 11-Ноя-20, 13:32  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру