The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз унифицированной платформы .NET 5 с поддержкой Linux и WebAssembly, opennews (ok), 11-Ноя-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


94. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (19), 12-Ноя-20, 18:26 
У меня ситуация абсолютно обратная. Выбрав 15 лет назад специализацию на системном администрировании Linux, я столкнулся с тем, что одного его мало знать. В итоге специализаций стало больше, а из-за этого задачи стали больше.

Я в один прекрасный момент перестал верить в байки FSF и прочую неинженерную религию вокруг Linux и стал задумываться, о том, сколько я работаю.
Вот например:
>  я всегда могу посмотреть исходники ядра, маны, найти кучу людей и рассылок которые разьяснят почему в ядре/coreutils/findutils/etc что-то именно так а не по-другому.

Вы подаёте это как достоинство, а для меня сама идея чтения левых манов, рассылок, копание в коде - это недостаток, потому что зачастую в Linux это надо делать.

> И я с сожалением и сочувствием смотрел все эти годы на мучения бывших коллег которым приходилось каждый год переучиваться под очередные "инновационные технологии"

А я всегда смотрел на них без грамма сожаления. MS редко что-то изобретает. Он строит свое решение, которое +/- универсально должно решить конкретную задачу конкретного корпоративного заказчика. Те кто ходят на их курсы, платят деньги за экзамены и учат магическое расположение кнопок в интерфейсе должны страдать. Давеча тут сдавался один знакомый. Человек пытался учить ADCS без грамма понимания TLS и PKI и ADFS без понимания чем аутентификация отличается от авторизации. Дурачков везде много.

> всей это бессмыслицы и исследованиям методом научного тыка.

А вот это я слышу очень часто от гордых админов Linux, которые считают себя лучше других людей. Обычно через 20 минут личной беседы на профессиональные темы они готовы на стенку лезть, а еще через 20 начинают конспектировать, потому что вся эта гордыня и превосходство от глупости и невежественности. Той же самой глупости, что у тех дурачков, которые учатся кнопки жамкать на платных курсах.

Мне прямо даже интересно стало, а что вы там у них такого не поняли, что посчитали бессмыслицей и не смогли найти официальную техдоку, что пришлось тыкаться?

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

98. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (98), 12-Ноя-20, 23:10 
Везде все одинаково. Если речь про .Net, то там полно кода вообще без документации и чтобы этим пользоваться нужно лезть в глубины глубин и самому разбирать код как это все работает. Такая же ситуация с юниксовым софтом (да, местами где-то лучше, местами где-то тоже самое).

Смешно, что большинство современных админов считают, что администрирования софта это пик их карьеры. Лезть в код и его патчить это и есть системное администрирование испокона веков. Историческая справка, в эпоху BBS были sysOp и sysAdmin, первые модерировали и перезапускали BBS, в то время как вторые модернизировали, патчили и т.д., вели так сказать прогрес. Вывод: жимкать кнопки, читать доку к конфигу в /etc это уровень sysop. Так чем вы гордитесь? =)

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

135. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (139), 13-Ноя-20, 16:18 
Давай пруфы про код без документации
Ответить | Правка | Наверх | Cообщить модератору

154. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +1 +/
Сообщение от Аноним (98), 13-Ноя-20, 22:34 
Я лично такие случаи не записываю. Смысл не в том, что нет страницы с докой, а в том, что из нее ничего не ясно. Описание было в стиле вот функция, возращает то-то, точка. Встречались целые куски API, из описания которого вообще не ясно как этим пользоваться. Код в тоже время был рабочий и полезный. Выход был либо искать в нете того кто разобрался и рассказал, либо самому вникать в дебри.

С учетом того, что я не помню какие именно это были случаи и с тем фактом, что документация обновляется, найти конкретные косяки не представляется сейчас возможным. Как встречу еще раз -- напишу.

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

156. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (98), 13-Ноя-20, 22:54 
Возможно не самый лучший пример, из последнего, где были трудности
https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnet...

Реальный код, как сделать чтобы авторизация была и по куки и по bearer:

            services.AddAuthorization(o =>
            {
                o.AddPolicy("BearerPolicy", policy =>
                    policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                        .RequireAuthenticatedUser()
                        .AddRequirements(new AuthenticationTypeRequirement("AuthenticationTypes.Federation"))
                );

                o.AddPolicy("CookiePolicy", policy =>
                    policy.AddAuthenticationSchemes(IdentityConstants.ApplicationScheme)
                        .RequireAuthenticatedUser()
                        .AddRequirements(new AuthenticationTypeRequirement("Identity.Application"))
                );
            });

Из этого кода самое страшное то, что "Identity.Application" зашит в код и нигде не упоминается. В данном случае идет простое наследование IAuthorizationRequirement:

    public class AuthenticationTypeRequirement : IAuthorizationRequirement
    {
        internal string AuthenticationType { get; }

        public AuthenticationTypeRequirement(string authenticationType)
        {
            AuthenticationType = authenticationType;
        }
    }

Дока на IAuthorizationRequirement очень полезна: https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnet...

Прикольный (один из) ответ МС: https://github.com/dotnet/aspnetcore/issues/18329

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

157. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (98), 13-Ноя-20, 23:01 
Как зашит-то интересно https://github.com/aspnet/Identity/blob/feedcb5c53444f716ef5...
Ответить | Правка | Наверх | Cообщить модератору

162. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (19), 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 и по кукам, вроде бы одновременно, а по факту проводите дифференциацию на уровне политик авторизации. Такое себе...

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

170. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (98), 14-Ноя-20, 22:01 
1) Мультитенатность. Зачем она нужна в корпоративных B2B приложениях? Не нужна. Точка. Да, это было мое осознанное решение. Нужен будет OAuth2 -- прикручу, не беспокойтесь.

>Так-то я не понимаю в этих ваших дотнетах

Ну, вы с этого бы и начали. Я вас пошлю к первоисточнику: https://www.dotnetcurry.com/aspnet-core/1511/authentication-...

>Такое себе...

Давайте, критикуйте.

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

176. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (19), 15-Ноя-20, 09:52 
> 1) Мультитенатность. Зачем она нужна в корпоративных B2B приложениях? Не нужна. Точка.

Вот и начинает до меня доходить ваше "непонимание". Вы видимо дурак. Точка.
Вам не надо а другим надо, MS делает не только дуракам, у которых чуть что "не нужно", а в том числе с оглядкой на сервис-провайдеров, которые даже и крупным бизнесом-то могут не быть.

Поддержка мультитенанси внутри среды это не только лишь OAuth2. Понимание как всё устроено и зачем устроена позволяет понять архитектуру решений по AuthN/AuthZ. Вам видимо это "не нужно" поэтому вы ищете простое решение, чтобы вам его описали в красивой доке в форме пошагового руководства, а вы чуть чуть подправите под себя. Так да? Привыкли читать блоги и форумы про Linux вместо техдоки (они есть, но частично платные у вендоров), нахватались хамского "не нужно" и думаете, что это нормальный подход. А потом у вас трудности... непонятно конечно почему... XD

> Ну, вы с этого бы и начали. Я вас пошлю к первоисточнику:
> https://www.dotnetcurry.com/aspnet-core/1511/authentication-...

Это не первоисточник - это ерунда какая-то. Официальную доку надо читать. Понимать в ней слова, осознавать словосочетания, вникать в смысл предложения. Первоисточник относительно .NET не бывает вне домена microsoft.com или пары его субдоменов.

> Давайте, критикуйте.

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

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

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

171. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (98), 14-Ноя-20, 22:35 
Вам интересно зачем делал через Policy. Затем, что

Это работает:
        [Authorize(Policy = "CookiePolicy")]
        [HttpGet("test-cookie")]
        public async Task<IActionResult> GetTestCookie()
        {
            return await Task.FromResult(Ok(new { result = "Cookie authorized" }));
        }

        [Authorize(Policy = "BearerPolicy")]
        [HttpGet("test-bearer")]
        public async Task<IActionResult> GetTestBearer()
        {
            return await Task.FromResult(Ok(new { result = "Bearer authorized" }));
        }


        [Authorize(AuthenticationSchemes = "Bearer")]
        [HttpGet("test-bearer2")]
        public async Task<IActionResult> GetTestBearer2()
        {
            return await Task.FromResult(Ok(new { result = "Bearer authorized" }));
        }


Это не работает (через bearer можно авторизоваться):

        [Authorize(AuthenticationSchemes = "Identity.Application")]
        [HttpGet("test-cookie2")]
        public async Task<IActionResult> GetTestCookie2()
        {
            return await Task.FromResult(Ok(new { result = "Cookie authorized" }));
        }

Вам был интересна проверка типов авторизации:

    public class AuthenticationTypeAuthorizationHandler : IAuthorizationHandler
    {
        public Task HandleAsync(AuthorizationHandlerContext context)
        {
            var pendingRequirements = context.PendingRequirements.ToList();

            foreach (var requirement in pendingRequirements.OfType<AuthenticationTypeRequirement>())
            {
                if (requirement.AuthenticationType == context.User.Identity.AuthenticationType)
                    context.Succeed(requirement);
            }

            return Task.CompletedTask;
        }
    }

Если знаете как сделать так, чтобы [Authorize(AuthenticationSchemes = "ЧТО-ТО")] четко разделял bearer от куки, то пожалуйста, высказывайтесь.

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

175. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (19), 15-Ноя-20, 09:27 
> context.User.Identity.AuthenticationType

Ага значит всё-таки из контекста проверяете. Угадал.

> Если знаете как сделать так, чтобы [Authorize(AuthenticationSchemes = "ЧТО-ТО")] четко разделял bearer от куки, то пожалуйста, высказывайтесь.

Официальная статья чем конкретно не угодила?
https://docs.microsoft.com/en-us/aspnet/core/security/author...

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

174. "Релиз унифицированной платформы .NET 5 с поддержкой Linux и ..."  +/
Сообщение от Аноним (98), 15-Ноя-20, 05:34 
Вобщем, решил вопрос:

services.AddAuthentication()
  .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, o => { ... })
  .AddCookie("Cookie", o => { ... });

services.ConfigureApplicationCookie(o =>
{
  o.ForwardDefaultSelector = ctx =>
    {
      if (ctx.Request.Query.ContainsKey("access_token") || ctx.Request.Headers.ContainsKey("Authorization"))
        return JwtBearerDefaults.AuthenticationScheme;

      return "Cookie";
    };
});

services.AddAuthorization(o =>
{
    o.AddPolicy("BearerPolicy", p => p.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                .RequireAuthenticatedUser()
    );
    o.AddPolicy("CookiePolicy", p => p.AddAuthenticationSchemes("Cookie")
                .RequireAuthenticatedUser()
    );
});

При логине по кукам не забыть указать схему HttpContext.SignInAsync("Cookie", ...). После этого все работает и через [Authorize(Policy = "CookiePolicy")] и через [Authorize(AuthenticationSchemes = "Cookie")] и через любую схему через [Authorize].

Спасибо вам, но не докам от МС, в которых ничего этого не рассказывается.

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

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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