Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 01.09.21 16:08
Оценка:
Есть вот стандартный темплате
https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/hosted-with-identity-server?view=aspnetcore-5.0&tabs=visual-studio
Всё работает замечательно, за исключением того что имеется прямой доступ к базе на сервере

services.AddIdentityServer()
    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();


Уж что только не перепробовал, но вот чем заменить эту подлую строку не нашел.
Добавить в IdentityServer свой CustomStorage можно, но тогда рассыпается всё, что Микрософт наделал.
Есть идеи как сдедать свой доступ к базе пользователей? Например, используя микросервис.
Re: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Shmj Ниоткуда  
Дата: 01.09.21 20:10
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Всё работает замечательно, за исключением того что имеется прямой доступ к базе на сервере


Позвольте уточнить — клиент получает строку подключения и напрямую подключается к базе? А у вас публичное приложение и давать всем подряд строку подключения не хотите? Правильно понял?
Re[2]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 01.09.21 21:32
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, AlexNek, Вы писали:


AN>>Всё работает замечательно, за исключением того что имеется прямой доступ к базе на сервере


S>Позвольте уточнить — клиент получает строку подключения и напрямую подключается к базе? А у вас публичное приложение и давать всем подряд строку подключения не хотите? Правильно понял?

Не совсем так.
Вероятно с блазором мало еще кто работает, поэтому немного воды.

Везде идет речь о двух моделях: блазор клиент и блазор сервер. На самом деле их три, так как блазор клиент может быть еще в режиме Hosted, когда часть кода на сервере, часть на клиенте.
И поначалу я не понимал отчего нет встроенной возможности сделать, грубо говоря, логин диалог для обычного блазор клиента. Ведь есть же примеры которые это делают с identity сервером (IS).
Но все они передеают пароль пользователя из клиента на IS Rest API. И кроме того все "секретные" данные нужно держать тоже на клиенте или как то их получать, всё равно на клиент.
Поэтому видимо и был сделан некий гибрид из сервера и клиента. Весь "логин" происходит фактически на сервере, но для пользователя это абсолютно прозрачно. Есть рукодельные версии, где логин также происходит на сервере в IS, но для этого происходит видимое переключение приложений.

Формы для "логина" также располагаются на сервере и всё это завязано с IS и базой данной.

Данная модель мне нравится больше и всё что мне хочется — это отрезать логику от конкретной базы данных. Так как все данные находятся в сервисах.
Но похоже микрософт этого не предусмотрел.
Re[3]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Shmj Ниоткуда  
Дата: 02.09.21 04:43
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Везде идет речь о двух моделях: блазор клиент и блазор сервер. На самом деле их три, так как блазор клиент может быть еще в режиме Hosted, когда часть кода на сервере, часть на клиенте.


Имх., это временно — пока MS- сами не определились чего хотят и делают в хаотичном порядке. Не хотелось бы тратить время на это.
Re[3]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: vaa  
Дата: 02.09.21 06:31
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Данная модель мне нравится больше и всё что мне хочется — это отрезать логику от конкретной базы данных. Так как все данные находятся в сервисах.


Что-то вы усложнили все. Вам нужно это https://aka.ms/blazor-standalone-auth и это https://docs.microsoft.com/ru-ru/aspnet/core/blazor/security/webassembly/additional-scenarios?view=aspnetcore-3.1#authenticate-users-with-a-third-party-provider-and-call-protected-apis-on-the-host-server-and-the-third-party
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 02.09.21 09:04
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, AlexNek, Вы писали:


AN>>Везде идет речь о двух моделях: блазор клиент и блазор сервер. На самом деле их три, так как блазор клиент может быть еще в режиме Hosted, когда часть кода на сервере, часть на клиенте.


S>Имх., это временно — пока MS- сами не определились чего хотят и делают в хаотичном порядке. Не хотелось бы тратить время на это.

Не вижу никакого хаоса, все три "режима" вполне логичны, каждый имеет недостатки и преимущества
Re[5]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Shmj Ниоткуда  
Дата: 02.09.21 09:12
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Не вижу никакого хаоса, все три "режима" вполне логичны, каждый имеет недостатки и преимущества


Зачем все это? Если речь о создании GUI — то зачем серверная версия? Или зачем что-то частично тянуть на сервер?
Re[4]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 02.09.21 09:14
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, AlexNek, Вы писали:


AN>>Данная модель мне нравится больше и всё что мне хочется — это отрезать логику от конкретной базы данных. Так как все данные находятся в сервисах.


vaa>Что-то вы усложнили все. Вам нужно это https://aka.ms/blazor-standalone-auth и это https://docs.microsoft.com/ru-ru/aspnet/core/blazor/security/webassembly/additional-scenarios?view=aspnetcore-3.1#authenticate-users-with-a-third-party-provider-and-call-protected-apis-on-the-host-server-and-the-third-party


Что то я не совсем вас понял. Вы хотите использовать Standalone WebAssembly? Так такого добра у меня полно. Не хочу передавать пароль пользователя серверу, как и хранить "секретные" данные на клиенте.
Re[6]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.09.21 09:31
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, AlexNek, Вы писали:


AN>>Не вижу никакого хаоса, все три "режима" вполне логичны, каждый имеет недостатки и преимущества


S>Зачем все это? Если речь о создании GUI — то зачем серверная версия? Или зачем что-то частично тянуть на сервер?

Это называется Blazor Desctop https://visualstudiomagazine.com/articles/2021/02/17/net-6-preview-1.aspx
А ему никакая вэбассембли не нужна
и солнце б утром не вставало, когда бы не было меня
Re[7]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Shmj Ниоткуда  
Дата: 02.09.21 09:39
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>>Зачем все это? Если речь о создании GUI — то зачем серверная версия? Или зачем что-то частично тянуть на сервер?

S> Это называется Blazor Desctop https://visualstudiomagazine.com/articles/2021/02/17/net-6-preview-1.aspx
S>А ему никакая вэбассембли не нужна

Я про браузерную версию. Зачем что-то частично делать на сервере? Просто рендерить все на клиенте, запускать код для вызова API сервера на клиенте. Желательно использовать XAML при этом.

На сервере — только REST API.

Зачем еще что-то мудрить?
Re[5]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: vaa  
Дата: 02.09.21 11:52
Оценка:
Здравствуйте, AlexNek, Вы писали:


AN>Что то я не совсем вас понял. Вы хотите использовать Standalone WebAssembly? Так такого добра у меня полно. Не хочу передавать пароль пользователя серверу, как и хранить "секретные" данные на клиенте.

Авторизация иначе как на сервере невозможна.
авторизоваться в простом случае можно либо через форму авторизации либо через web api.
совсем не обязательно использовать IS напрямую.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[6]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 02.09.21 12:01
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, AlexNek, Вы писали:


AN>>Не вижу никакого хаоса, все три "режима" вполне логичны, каждый имеет недостатки и преимущества


S>Зачем все это? Если речь о создании GUI — то зачем серверная версия? Или зачем что-то частично тянуть на сервер?

Ну вообще то затевать дискуссию нужно или нужно не входило в мои планы. Хотя может тоже, что полезное вылезет.

В принципе, да, можно делать всё на клиенте или всё на сервере. Но если, хотя бы, имеется общая база для аутентификации, то ситуация кардинально меняется.
На клиенте нужно хранить/вводить какие то "секретные" данные и передавать их на сервер. Значит вероятность компроментации этих данных возрастает.
Если же просто "показать" в декстопной версии окошки с сервера, то линия передачи будет просто отсутствовать. И все секретные данные можно будет хранить на сервере.
Конечно, можно и сервер взломать, но это несколько иной уровень, чем перехватить данные по дороге. Да, данные можно зашифровать, но ключ то будет один фиг на клиенте.
Как сделать по другому безопасное соединение клиента с сервером я не знаю. Поэтому решение предложенное микрософтом мне показалось удачным с точки зрения безопасности.
Re[7]: Blazor WebAssembly Hosted Applications без прямого до
От: AlexNek  
Дата: 02.09.21 12:03
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Это называется Blazor Desctop https://visualstudiomagazine.com/articles/2021/02/17/net-6-preview-1.aspx

S>А ему никакая вэбассембли не нужна
Но все проблемы безопасности остаются.
Отредактировано 23.09.2021 10:51 VladD2 . Предыдущая версия .
Re[6]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 02.09.21 12:17
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, AlexNek, Вы писали:



AN>>Что то я не совсем вас понял. Вы хотите использовать Standalone WebAssembly? Так такого добра у меня полно. Не хочу передавать пароль пользователя серверу, как и хранить "секретные" данные на клиенте.

vaa>Авторизация иначе как на сервере невозможна.
vaa>авторизоваться в простом случае можно либо через форму авторизации либо через web api.
В любом случае нужно посылать на сервер пароль пользователя.
Для начала интересует хотя-бы "нормальная" аутентификация пользователей, так как для Core Identity прокладка уже сделана. И там пароль не передается также.

vaa>совсем не обязательно использовать IS напрямую.

Зато удобнее будет делать авторизацию. Не зря же ведь микрософт IS 5 взял, а не свое что то замутил
Re[7]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Shmj Ниоткуда  
Дата: 02.09.21 12:20
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>На клиенте нужно хранить/вводить какие то "секретные" данные и передавать их на сервер. Значит вероятность компроментации этих данных возрастает.


Брр... Что мешает на клиенте сделать подпись приватным ключом и не передавать его на сервер?

AN>Если же просто "показать" в декстопной версии окошки с сервера, то линия передачи будет просто отсутствовать. И все секретные данные можно будет хранить на сервере.


А что через это окошко данные на сервер не передаются?

AN>Конечно, можно и сервер взломать, но это несколько иной уровень, чем перехватить данные по дороге. Да, данные можно зашифровать, но ключ то будет один фиг на клиенте.


Вам поможет шифрование с открытым ключом.

AN>Как сделать по другому безопасное соединение клиента с сервером я не знаю. Поэтому решение предложенное микрософтом мне показалось удачным с точки зрения безопасности.


SSL, HTTPS.
Re[8]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.09.21 12:29
Оценка:
Здравствуйте, AlexNek, Вы писали:

S>>>Зачем все это? Если речь о создании GUI — то зачем серверная версия? Или зачем что-то частично тянуть на сервер?

S>> Это называется Blazor Desctop https://visualstudiomagazine.com/articles/2021/02/17/net-6-preview-1.aspx
S>>А ему никакая вэбассембли не нужна
AN>Но все проблемы безопасности остаются.
Ну на уровне юзера, а не песочницы если мы про компьютер на котором выполняется приложениею говорим
Если доступ к серверу, то да нужна авторизация. Но опять же с десктопа больше возможностей
и солнце б утром не вставало, когда бы не было меня
Re[7]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 02.09.21 13:48
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Как сделать по другому безопасное соединение клиента с сервером я не знаю. Поэтому решение предложенное микрософтом мне показалось удачным с точки зрения безопасности.


С трудом понимаю что все таки ты хочешь. Если хочешь аутентифицироваться на сервере — используй IS с auth code flow with PKCE. На клиенте ничего хранить и даже вводить не нужно, пользователь должен вводить свои креды в окошке IS в браузере. Это единственное безопасное решение, все остальное, при условии не полного контроля за местом развертывания клиента, это уязвимые варианты.
Если тебя уязвимость устраивает — зачем тогда вообще вся возня с IS? Передавай прямо в заколовках константный API Key и проверяй его на сервере.
Что решает подмена БД IS — тут я вообще не понял.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 02.09.21 13:51
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Зато удобнее будет делать авторизацию. Не зря же ведь микрософт IS 5 взял


Ты же в курсе что он платный, и сильно платный?
У МС, кстати, и свое есть — Azure Active Directory для облака и Windows Server для онпрема.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 03.09.21 11:16
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, AlexNek, Вы писали:


AN>>На клиенте нужно хранить/вводить какие то "секретные" данные и передавать их на сервер. Значит вероятность компроментации этих данных возрастает.


S>Брр... Что мешает на клиенте сделать подпись приватным ключом и не передавать его на сервер?

Клиент и приватный ключ как то для меня не совмещается вместе.

AN>>Если же просто "показать" в декстопной версии окошки с сервера, то линия передачи будет просто отсутствовать. И все секретные данные можно будет хранить на сервере.


S>А что через это окошко данные на сервер не передаются?

Но не через rest api

AN>>Конечно, можно и сервер взломать, но это несколько иной уровень, чем перехватить данные по дороге. Да, данные можно зашифровать, но ключ то будет один фиг на клиенте.


S>Вам поможет шифрование с открытым ключом.

Да спасибо, чет казалось только симметричное шифрование спасет.

https://stackoverflow.com/questions/18485715/how-to-use-public-and-private-key-encryption-technique-in-c-sharp
Re[8]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 03.09.21 11:31
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


AN>>Как сделать по другому безопасное соединение клиента с сервером я не знаю. Поэтому решение предложенное микрософтом мне показалось удачным с точки зрения безопасности.


НС>С трудом понимаю что все таки ты хочешь.

Вся проблема в том, что на сервере нет прямого доступа к базе

НС>На клиенте ничего хранить и даже вводить не нужно, пользователь должен вводить свои креды в окошке IS в браузере. Это единственное безопасное решение, все остальное, при условии не полного контроля за местом развертывания клиента, это уязвимые варианты.

Ну как то это мне тоже кажется правильным. Проблема с этим вариантом видимое переключение, ... хотя можно во фрэйме вызывать. Но именно это микрософт уже и сделал, все работает как и хотелось — едиственная проблема прямой доступ к базе.

НС>Что решает подмена БД IS — тут я вообще не понял.

Есть удобное решение "из коробки", но оно затрагивает одновременно и аутентификацию и авторизацию и локальную базу данных.
Заменив доступ к базе, получам доступ к стандарному решению.
Еще один ньюанс, что менять хэши паролей в базе очень сильно не хочется, а для "стандартного решения" это и не нужно будет.
Re[8]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 03.09.21 11:51
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


AN>>Зато удобнее будет делать авторизацию. Не зря же ведь микрософт IS 5 взял


НС>Ты же в курсе что он платный, и сильно платный?

Да, хотя еще не до конца понял, как будет с NET6.0 — у кого доход больше млн. тот платит?
Re[9]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Shmj Ниоткуда  
Дата: 03.09.21 11:52
Оценка:
Здравствуйте, AlexNek, Вы писали:

S>>Брр... Что мешает на клиенте сделать подпись приватным ключом и не передавать его на сервер?

AN>Клиент и приватный ключ как то для меня не совмещается вместе.

Там два варианта:

1. Вычислять хеш пароля на клиенте и передавать не пароль а хеш по HTTPS-каналу.
2. Клиент генерит себе закрытый ключ, а на сервер отправляет только открытый.

S>>А что через это окошко данные на сервер не передаются?

AN>Но не через rest api

И что? Какое это имеет значение?
Re[9]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 03.09.21 21:28
Оценка:
Здравствуйте, AlexNek, Вы писали:

НС>>С трудом понимаю что все таки ты хочешь.

AN>Вся проблема в том, что на сервере нет прямого доступа к базе

И что ты хочешь? Где хранить пользователей, если БД нет?

AN>Проблема с этим вариантом видимое переключение


Тем не менее безопасен только он.

AN>, ... хотя можно во фрэйме вызывать.


Тоже не очень хорошая практика. В строке браузера должен отображаться урл страницы логина с статусом сертификата, чтобы пользователь видел что он пароль туда, куда надо вводит, а не в какую то обманку.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 03.09.21 21:28
Оценка:
Здравствуйте, AlexNek, Вы писали:

НС>>Ты же в курсе что он платный, и сильно платный?

AN>Да, хотя еще не до конца понял, как будет с NET6.0 — у кого доход больше млн. тот платит?

При чем тут доход? Это зависит только от количества клиентов и требуемого дополнительного функционала — https://duendesoftware.com/products/identityserver#pricing
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 04.09.21 08:42
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


НС>>>С трудом понимаю что все таки ты хочешь.

AN>>Вся проблема в том, что на сервере нет прямого доступа к базе

НС>И что ты хочешь? Где хранить пользователей, если БД нет?


Почему нет? Нет только прямого доступа к таблицам чего хочет DbContext, ну и EF соотвественно также нет.
Re[10]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 04.09.21 08:48
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


НС>>>Ты же в курсе что он платный, и сильно платный?

AN>>Да, хотя еще не до конца понял, как будет с NET6.0 — у кого доход больше млн. тот платит?

НС>При чем тут доход? Это зависит только от количества клиентов и требуемого дополнительного функционала — https://duendesoftware.com/products/identityserver#pricing

тут вроде немного по другому
https://devblogs.microsoft.com/aspnet/asp-net-core-6-and-authentication-servers/

хотя входит в противоречие с этим
https://duendesoftware.com/license/identityserver.pdf
Возможно имеется в виду исключительно "прямое" использование IS
Re[11]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 04.09.21 11:30
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Почему нет? Нет только прямого доступа к таблицам чего хочет DbContext, ну и EF соотвественно также нет.


А что есть?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[12]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 04.09.21 14:43
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


AN>>Почему нет? Нет только прямого доступа к таблицам чего хочет DbContext, ну и EF соотвественно также нет.


НС>А что есть?

А что это имеет какой то смысл в конексте вопроса? Допустим, некий интерфейс с набором функций FindUserBy... и прочих.
Всё что позволяет написать вместо
services.AddDefaultIdentity<ApplicationUser>()
                .AddEntityFrameworkStores<ApplicationDbContext>();


Это
services.AddDefaultIdentity<ApplicationUser>()
                .AddCustomStores();
Re[13]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 05.09.21 18:10
Оценка:
Здравствуйте, AlexNek, Вы писали:

НС>>А что есть?

AN>А что это имеет какой то смысл в конексте вопроса?

Я до сих пор не могу понять в чем твой вопрос.

AN>Допустим, некий интерфейс с набором функций FindUserBy... и прочих.

AN>Всё что позволяет написать вместо
AN>
AN>services.AddDefaultIdentity<ApplicationUser>()
AN>                .AddEntityFrameworkStores<ApplicationDbContext>();
AN>


AN>Это

AN>
AN>services.AddDefaultIdentity<ApplicationUser>()
AN>                .AddCustomStores();
AN>


Так в чем проблема то? Заменить дефолтную реализацию на EF не так уж и сложно. Не особо сложно и весь Aspnet.Idenity оттуда выкинуть. Только по прежнему непонятно зачем тебе это нужно и что ты при помощи такого шага хочешь решить.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[14]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 06.09.21 09:33
Оценка:
НС>Здравствуйте, AlexNek, Вы писали:

НС>>>А что есть?

AN>>А что это имеет какой то смысл в конексте вопроса?

НС>Я до сих пор не могу понять в чем твой вопрос.


Ну можно пойти по шагам. Какой из шагов непонятен?
A1. Создаем Blazor WebAssembly Hosted Applications
https://timheuer.com/blog/deploy-blazor-webassembly-applications-on-azure-using-github-actions-wasm/
Запускаем, создаем базу всё работает.
A2. Смотрим, что с базой данных. Это MsSQL, она расположена на сервере и к ней происходит "прямой доступ" через DBContext.
A3. Что имеется? Скажем так, что идентичная база данных раположеная на том же сервере. Но что это за база, какого типа и какие там есть таблицы сервер не знает. У него есть только интерфейс через который он может работать с базой.

Вариант Б
Б1. Создаем Blazor Server с Individual User Account
https://docs.microsoft.com/en-us/powerapps/developer/data-platform/webapi/quick-start-blazor-server-app
Б2. Смотрим, что с базой данных. Это MsSQL, она расположена на сервере и к ней происходит "прямой доступ" через DBContext.
Б3. Для Identity имеется Custom Store. Пишем свой Custom Store и обращаемся куда угодно за данными

Вариант С
С1. Создаем проект с IdentityServer4 как сервер и также свой проект как клиент использую ASP.NET Core
С2. Смотрим, что с базой данных на сервере. Это MsSQL, она расположена на сервере и к ней происходит "прямой доступ" через DBContext. Модель базы такая же, но данные несколько отличаются.
С3. Для IS4 также есть Custom Store и дополнительные данные. Все также можно заменить на "свои" вызовы.
Re[15]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 06.09.21 10:48
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Ну можно пойти по шагам. Какой из шагов непонятен?


Мне непонятно что ты хочешь получить и зачем, а не твои шаги.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[16]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 06.09.21 11:04
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


AN>>Ну можно пойти по шагам. Какой из шагов непонятен?


НС>Мне непонятно что ты хочешь получить и зачем, а не твои шаги.

То бишь, по шагам никаких вопросов нет, всё понятно?

Хочу получить рабочий вариант A1 с п.3 вместо п.2
Re[17]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 06.09.21 11:26
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Хочу получить рабочий вариант A1 с п.3 вместо п.2


Ты специально так формулируешь, чтобы тебя сложно было понять? Еще раз — почему не устраивает необходимость продеплоить для IS его собственную БД? Откуда IS должен брать при отсутствии БД информацию для валидации клиентов и пользователей?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[18]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 06.09.21 11:57
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


AN>>Хочу получить рабочий "вариант A" с п.3 вместо п.2


НС>Ты специально так формулируешь, чтобы тебя сложно было понять?

Сорри, но я не могу даже вообразить какие еще сложности могут быть с пониманием
Что непонятного в описанных ранее шагах?

НС>Еще раз — почему не устраивает необходимость продеплоить для IS его собственную БД?

Ну так это "Вариант С". Там создаются другие данные несовместимые с "вариантом Б". Кроме того, визуальное переключение окон неприемлимо.

НС>Откуда IS должен брать при отсутствии БД информацию для валидации клиентов и пользователей?

Ну почему опять — нет базы???
Да есть же база, только доступ к ней — не через локальный DBContext. Это всё отличие.

У меня есть только красный овал, всё что в зеленой рамке недоступно.
Во всех примерах, по умолчанию "зеленая рамка" должна быть доступна.
Re[19]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 06.09.21 12:51
Оценка:
Здравствуйте, AlexNek, Вы писали:

НС>>Еще раз — почему не устраивает необходимость продеплоить для IS его собственную БД?

AN>Ну так это "Вариант С". Там создаются другие данные несовместимые с "вариантом Б".

Ну пипец. Я задаю вопрос, а в ответ опять какие то варианты. Какие такие несовместимые данные, почему оним вдруг создаются?

AN> Кроме того, визуальное переключение окон неприемлимо.


Это небезопасно. Еще раз — единственный безопасный способ аутентификации в OAuth2 в случае неконтроллируемого делоймента — Auth Code Flow with PKCE.
Если на безопасность пофик — зачем тебе тогда вообще OAuth2 и IS? Сделай простейшую схему с API Key.
И, в любом случае, это совсем другая история, не имеющая вообще никакого отношения к потребности IS в собственной БД.

НС>>Откуда IS должен брать при отсутствии БД информацию для валидации клиентов и пользователей?

AN>Ну почему опять — нет базы???
AN>Да есть же база, только доступ к ней — не через локальный DBContext

А какой есть?

AN>Image: 2021-09-06_13-48-32.png


Выкинь из головы все свои подробности реализации и ответь на заданные вопросы прямо.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[20]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 06.09.21 13:30
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


НС>>>Еще раз — почему не устраивает необходимость продеплоить для IS его собственную БД?

AN>>Ну так это "Вариант С". Там создаются другие данные несовместимые с "вариантом Б".

НС>Ну пипец. Я задаю вопрос, а в ответ опять какие то варианты.

Почему какие то? Это ссылка на то что было уже описано. Могу еще раз скопировать

Вариант С
С1. Создаем проект с IdentityServer4 как сервер и также свой проект как клиент использую ASP.NET Core
С2. Смотрим, что с базой данных на сервере. Это MsSQL, она расположена на сервере и к ней происходит "прямой доступ" через DBContext. Модель базы такая же, но данные несколько отличаются.
С3. Для IS4 также есть Custom Store и дополнительные данные. Все также можно заменить на "свои" вызовы.


AN>> Кроме того, визуальное переключение окон неприемлимо.


НС>Это небезопасно. Еще раз — единственный безопасный способ аутентификации в OAuth2 в случае неконтроллируемого делоймента — Auth Code Flow with PKCE.

Ну так это и есть варант А, что сделал микрософт. Только он выглядит "приличнее".

A1. Создаем Blazor WebAssembly Hosted Applications
https://timheuer.com/blog/deploy-blazor-webassembly-applications-on-azure-using-github-actions-wasm/



НС>Выкинь из головы все свои подробности реализации и ответь на заданные вопросы прямо.

Сорри, но имею понятию в каких категориях Вы мыслите что бы ответить адекватно.
Похоже мы слишком по разному мыслим. Если уж и картинка не помогает.
Но попробую.

НС>Какие такие несовместимые данные, почему оним вдруг создаются?

Хэш пароля пользователя минимум другой.

НС>А какой есть?

Никакого нет ДБ контекста, есть только интерфейс доступа. Код что ли нужен?
Re[21]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 06.09.21 13:45
Оценка:
Здравствуйте, AlexNek, Вы писали:

НС>>Ну пипец. Я задаю вопрос, а в ответ опять какие то варианты.

AN>Почему какие то?

Потому что ты не отвечаешь на вопросы по исходной задаче, а вместо этого пытаешься впихнуть свои решения.

НС>>Это небезопасно. Еще раз — единственный безопасный способ аутентификации в OAuth2 в случае неконтроллируемого делоймента — Auth Code Flow with PKCE.

AN>Ну так это и есть варант А, что сделал микрософт.

И?

НС>>Выкинь из головы все свои подробности реализации и ответь на заданные вопросы прямо.

AN>Сорри, но имею понятию в каких категориях Вы мыслите что бы ответить адекватно.

Зато мы все тут имеем понятие про твой специфический контекст, ага. Ну, как знаешь.

AN>Похоже мы слишком по разному мыслим.


https://rsdn.org/Info/howtoask.xml

НС>>Какие такие несовместимые данные, почему оним вдруг создаются?

AN>Хэш пароля пользователя минимум другой.

Где другой хеш пароля? Кто создает другой хеш пароля? Как его IS проверит, если к нему доступа нет?

НС>>А какой есть?

AN>Никакого нет ДБ контекста

Пипец просто.

AN>, есть только интерфейс доступа.


Какой такой интерфейс доступа? БД все таки есть и коннект внутри процесса доступен, просто к ней нет DBContext? Или у процесса вообще доступа к БД нет?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[22]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 06.09.21 14:33
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


НС>>>Ну пипец. Я задаю вопрос, а в ответ опять какие то варианты.

AN>>Почему какие то?

НС>Потому что ты не отвечаешь на вопросы по исходной задаче, а вместо этого пытаешься впихнуть свои решения.

Это не решения,а обяснения того что уже сделано и попробовано.

НС>>>Это небезопасно. Еще раз — единственный безопасный способ аутентификации в OAuth2 в случае неконтроллируемого делоймента — Auth Code Flow with PKCE.

AN>>Ну так это и есть варант А, что сделал микрософт.
НС>И?
И я его хочу использовать

НС>>>Выкинь из головы все свои подробности реализации и ответь на заданные вопросы прямо.

AN>>Сорри, но имею понятию в каких категориях Вы мыслите что бы ответить адекватно.

НС>Зато мы все тут имеем понятие про твой специфический контекст, ага. Ну, как знаешь.

Ну отчего специфический? вроде совершенно общеизвестный

AN>>Похоже мы слишком по разному мыслим.


НС>
https://rsdn.org/Info/howtoask.xml
Может быть это требуется?

Когда задаете вопрос, укажите с самого начала, что вы все это уже сделали (1..6);



НС>>>Какие такие несовместимые данные, почему оним вдруг создаются?

AN>>Хэш пароля пользователя минимум другой.

НС>Где другой хеш пароля? Кто создает другой хеш пароля?

Базы данных пользователей созданных с помощью Микрософт и с помошью IS будут отличаться. MS и IS создают разные хэши.
НС>Как его IS проверит, если к нему доступа нет?

Это прямой доступ к базе, для которого и требуется dbContext. Тут прямой доступ к реляционной таблице Users, которая описана в dbContext
IdentityUser user = dbContext.Users.FirstOrDefault(u => u.Id.Equals(userId));

Это используется по умолчанию. (Возможно не абсолютно так)


А это как я обращаюсь на самом нижнем уровне к пользователям. Мне совершенно по барабану как данные пользователя хранятся и где.
IdentityUser user = dbInterface.GetUserById(userId);

Но что бы это сделать нужно иметь интерфейс ICustomStore и возможность задать его использование вместо dbContext


Может так станет понятней?
Re[23]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 06.09.21 14:44
Оценка:
Здравствуйте, AlexNek, Вы писали:

НС>>Потому что ты не отвечаешь на вопросы по исходной задаче, а вместо этого пытаешься впихнуть свои решения.

AN>Это не решения,а обяснения того что уже сделано и попробовано.



НС>>Зато мы все тут имеем понятие про твой специфический контекст, ага. Ну, как знаешь.

AN>Ну отчего специфический?

От того что никто не знает, что и как там у тебя все устроено, и информацию из тебя приходится доставать клещами.

НС>>https://rsdn.org/Info/howtoask.xml

AN>Может быть это требуется?
AN>

AN>Когда задаете вопрос, укажите с самого начала, что вы все это уже сделали (1..6);


Нет, требуется:

Описывайте симптомы проблемы, а не свои предположения
Задавайте ясные и четкие вопросы


НС>>Где другой хеш пароля? Кто создает другой хеш пароля?

AN>Базы данных пользователей созданных с помощью Микрософт

Ты в Microsoft звонил и они тебе прислали базу твоих пользователей? Что за "Базы данных пользователей созданных с помощью Микрософт"?

НС>>Как его IS проверит, если к нему доступа нет?

AN>Это прямой доступ к базе, для которого и требуется dbContext.

Нет, для прямого доступа не требуется DBContext.

AN>Но что бы это сделать нужно иметь интерфейс ICustomStore и возможность задать его использование вместо dbContext


Такая возможность есть, и не одна. Чтобы ответить подробнее — надо нормально задать вопрос.

AN>Может так станет понятней?


Пока не особо.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[24]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 06.09.21 15:36
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:


НС>>>Зато мы все тут имеем понятие про твой специфический контекст, ага. Ну, как знаешь.

AN>>Ну отчего специфический?

НС>От того что никто не знает, что и как там у тебя все устроено, и информацию из тебя приходится доставать клещами.

Так это абсолютно стандартные знания. Ничего особенного. Хотя да, Blazor — это несколько молодая тема.

AN>>Может быть это требуется?

НС>Нет, требуется:
НС>

НС>Описывайте симптомы проблемы, а не свои предположения
НС>Задавайте ясные и четкие вопросы

Ну именно так и начиналось. Вот что есть, а вот что надо.

НС>>>Где другой хеш пароля? Кто создает другой хеш пароля?

AN>>Базы данных пользователей созданных с помощью Микрософт

НС>Ты в Microsoft звонил и они тебе прислали базу твоих пользователей? Что за "Базы данных пользователей созданных с помощью Микрософт"?

Тут уж мне пора хвататься за голову, как можно дойти то такой мысли?
Создаём проект, допустим тот же Blazor WebAssembly Hosted Applications, запускаем его, создаем базу, регистрируем пользователей — вот и база с пользователями и паролями.
Или хотелось что бы было написано типа: База данных пользователей созданная с помощью программы на основе стандартного темплате от американской софтваре фирмы Микрософт, сделанной в визуал студии 2019?

НС>>>Как его IS проверит, если к нему доступа нет?

AN>>Это прямой доступ к базе, для которого и требуется dbContext.

НС>Нет, для прямого доступа не требуется DBContext.

Ну теперь уже мне интересно, а что требуется SQL? Или что? Или прямой доступ нужно было обязательно в скобки взять?

AN>>Но что бы это сделать нужно иметь интерфейс ICustomStore и возможность задать его использование вместо dbContext


НС>Такая возможность есть, и не одна. Чтобы ответить подробнее — надо нормально задать вопрос.

У меня на работе был коллега, который также не понимал моих объяснений, пока я не понял какими категориями он мыслит и не стал отвечать такими же категориями.
Но я пока никак не могу врубится в какой вселенной вы живете, и что означают для вас "нормальные вопросы".
Ну например, я не знаю другой официальной возможности подменить доступ к данным пользователя, кроме как через ICustomStore, хотя бы для IS.
Re[25]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: Ночной Смотрящий Россия  
Дата: 06.09.21 17:55
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Или хотелось что бы было написано типа: База данных пользователей созданная с помощью программы на основе стандартного темплате от американской софтваре фирмы Микрософт, сделанной в визуал студии 2019?


Нет, нужно было посмотреть что там за база, точнее что за библиотека за нее отвечает. Стандартное решение от МС это Aspnet Identity, и именно его, внезапно, IS использует в качестве дефолтного для работы с пользователями. Самостоятельно IS лазит в БД только за специфичными для OAuth2 вещами — клиентами, persisted grants etc.
И именно поэтому я от тебя и пытаюсь получить ответ на вопрос что там за БД и почему вдруг она с IS не дружит. Ставить этот шаблон и разбираться за тебя, уж извини, я не буду.

AN>Ну например, я не знаю другой официальной возможности подменить доступ к данным пользователя, кроме как через ICustomStore, хотя бы для IS.


Для IS там другая механика, не ICustomStore.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[26]: Blazor WebAssembly Hosted Applications без прямого доступа в базу
От: AlexNek  
Дата: 06.09.21 19:06
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, AlexNek, Вы писали:


AN>>Или хотелось что бы было написано типа: База данных пользователей созданная с помощью программы на основе стандартного темплате от американской софтваре фирмы Микрософт, сделанной в визуал студии 2019?


НС>Нет, нужно было посмотреть что там за база, точнее что за библиотека за нее отвечает.

Ну мне и в голову не могло прийти, что интересуют такие интимные подробности

НС>Стандартное решение от МС это Aspnet Identity, и именно его, внезапно, IS использует в качестве дефолтного для работы с пользователями.

Ну отчего же внезапно, Микрософт специально их со своей частью подружил. И две таблички еще добавил.
Фактически ентой штукой подружил
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>


Соответственно, эти все добавки опрашиваются автоматом
                .AddInMemoryIdentityResources(Config.GetIdentityResources())
                .AddInMemoryApiResources(Config.GetApiResources())
                .AddInMemoryApiScopes(Config.GetApiScopes())
                .AddInMemoryClients(Config.GetClients())


считал, что это это общеизвестно

НС>Самостоятельно IS лазит в БД только за специфичными для OAuth2 вещами — клиентами, persisted grants etc.

НС>И именно поэтому я от тебя и пытаюсь получить ответ на вопрос что там за БД и почему вдруг она с IS не дружит.
Ну так именно это и нужно было спросить: MSSQL с табличками AspNetUser+AspNetххх (еще 6 таблиц) + 2 для IS + то что нужно проге.
Считал эти сведения совершенно бесполезными и само собой разумеющимися.
Тем более, уже наверное десяток раз повторял: всё работает когда используется ApplicationDbContext
Переопределить его как хочется может быть и можно, но эмулировать реляционные таблицы и EF как то не хочется.

НС>Ставить этот шаблон ..., я не буду.

Предполагалось, что это было проделано уже Х раз до того. Он в стандартной поставке. Предполагалось знакомство c Blazor.

AN>>Ну например, я не знаю другой официальной возможности подменить доступ к данным пользователя, кроме как через ICustomStore, хотя бы для IS.


НС>Для IS там другая механика, не ICustomStore.


Я нашел только это, если нужно точное название интерфейса. Суть от этого не меняется.
public class CustomStore : IProfileService
Re[6]: [OFF] Authentication и Authorization
От: Mystic Artifact  
Дата: 09.09.21 18:25
Оценка:
Простите, что не по теме...

vaa>Авторизация иначе как на сервере невозможна.

+1

vaa>авторизоваться в простом случае можно либо через форму авторизации либо через web api.

vaa>совсем не обязательно использовать IS напрямую.
Авторизация — есть акт, наделения пользователя полномочиями. Я, царь, уполномочиваю, этого господина — представлять интересы моего государства, в данном регионе, данному лицу. А так же последующая проверка этих самых полномочий для данного лица. Это и есть авторизация.
Её делает сервер: проверяя разрешения, и администратор — наделяя пользователей этими разрешениями.

Я понимаю, что это всё ходит огромными парами (или целыми парОмами, если хотите) и в разговорах используется на практике в полнейшей каше, но всё таки, эти термины и их смысл — хорошо известны, и ещё задолго до появления компьютеров.
Re[7]: [OFF] Authentication и Authorization
От: vaa  
Дата: 10.09.21 03:06
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:

vaa>>авторизоваться в простом случае можно либо через форму авторизации


MA> Я понимаю, что это всё ходит огромными парами (или целыми парОмами, если хотите) и в разговорах используется на практике в полнейшей каше, но всё таки, эти термины и их смысл — хорошо известны, и ещё задолго до появления компьютеров.


https://www.kaspersky.ru/blog/identification-authentication-authorization-difference/29123/

Авторизация, процесс, который, в общем-то, происходит непосредственно после аутентификации, следовательно форма аутентификации есть также форма авторизации.
кстати, гугл на мой стороне, загуглите "форма авторизации" и "форма аутентификации".
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[8]: [OFF] Authentication и Authorization
От: Mystic Artifact  
Дата: 10.09.21 19:07
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>кстати, гугл на мой стороне, загуглите "форма авторизации" и "форма аутентификации".

Это и есть предмет оффтопика и не направлен лично на вас. (Возможно это было непонятно, извиняюсь.)

Если всё же обратиться не к гуглу (который мне не найдет тоже самое, что и вам, поэтому совершенно не ясно к чему вы аппелируете) — а обратиться к словарным определениям, то станет ясно, что это бессмыслица.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.