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 — тут я вообще не понял.

Есть удобное решение "из коробки", но оно затрагивает одновременно и аутентификацию и авторизацию и локальную базу данных.
Заменив доступ к базе, получам доступ к стандарному решению.
Еще один ньюанс, что менять хэши паролей в базе очень сильно не хочется, а для "стандартного решения" это и не нужно будет.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.