SSO — это процесс аутентификации, который позволяет пользователям получать доступ к нескольким приложениям с помощью одного основного ключа.
Это реализуется с использованием централизованного сервера аутентификации, который хранит учётные данные пользователя и проверяет их для каждого приложения.
Вот какие шаги происходят, если вы хотите войти в веб-приложение Trello, используя аккаунт Google:
1. Открываете страницу входа Trello и выбираете Google как способ авторизации
2. Trello перенаправляет пользователя на страницу входа Google
3. Пользователю отображается страница входа Google
4. Пользователь вводит свои учётные данные Google
5. Google отправляет информацию аутентификации на сервер авторизации SSO
6. Если учётные данные валидны, сервер авторизации возвращает токен аутентификации (SAML)
7. Google отправляет токен аутентификации в Trello
8. На последнем шаге Trello отправляет токен на сервер аутентификации Google для его валидации
9. Если токен валиден, Trello предоставляет пользователю доступ и сохраняет сессию для последующих взаимодействий
Преимущества SSO:
- Улучшенный пользовательский опыт. Пользователю не нужно запоминать несколько логинов и паролей.
- Повышенная безопасность. Пользователи реже переиспользуют пароли в разных приложениях.
Недостатки:
- Единая точка отказа. Один из ключевых минусов — SSO создаёт single point of failure. Если система SSO скомпрометирована, злоумышленник может получить доступ ко всем подключённым приложениям и сервисам.
- Риски безопасности. Если учётные данные скомпрометированы, под угрозой оказываются все связанные приложения.
Некоторые распространённые типы SSO:
- SAML-based SSO. Самый распространённый тип SSO. Использует протокол SAML для обмена данными аутентификации между SSO-сервером и приложениями.
- OpenID Connect. Более новый тип SSO, основанный на OAuth 2.0. Проще по сравнению с SAML и легче интегрируется с веб-приложениями.
И популярные решения SSO:
- Azure Active Directory
- Okta
- Ping Identity
- OneLogin
- Google Cloud Identity Platform
👉 @KodBlog
Это реализуется с использованием централизованного сервера аутентификации, который хранит учётные данные пользователя и проверяет их для каждого приложения.
Вот какие шаги происходят, если вы хотите войти в веб-приложение Trello, используя аккаунт Google:
1. Открываете страницу входа Trello и выбираете Google как способ авторизации
2. Trello перенаправляет пользователя на страницу входа Google
3. Пользователю отображается страница входа Google
4. Пользователь вводит свои учётные данные Google
5. Google отправляет информацию аутентификации на сервер авторизации SSO
6. Если учётные данные валидны, сервер авторизации возвращает токен аутентификации (SAML)
7. Google отправляет токен аутентификации в Trello
8. На последнем шаге Trello отправляет токен на сервер аутентификации Google для его валидации
9. Если токен валиден, Trello предоставляет пользователю доступ и сохраняет сессию для последующих взаимодействий
Преимущества SSO:
- Улучшенный пользовательский опыт. Пользователю не нужно запоминать несколько логинов и паролей.
- Повышенная безопасность. Пользователи реже переиспользуют пароли в разных приложениях.
Недостатки:
- Единая точка отказа. Один из ключевых минусов — SSO создаёт single point of failure. Если система SSO скомпрометирована, злоумышленник может получить доступ ко всем подключённым приложениям и сервисам.
- Риски безопасности. Если учётные данные скомпрометированы, под угрозой оказываются все связанные приложения.
Некоторые распространённые типы SSO:
- SAML-based SSO. Самый распространённый тип SSO. Использует протокол SAML для обмена данными аутентификации между SSO-сервером и приложениями.
- OpenID Connect. Более новый тип SSO, основанный на OAuth 2.0. Проще по сравнению с SAML и легче интегрируется с веб-приложениями.
И популярные решения SSO:
- Azure Active Directory
- Okta
- Ping Identity
- OneLogin
- Google Cloud Identity Platform
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👏2🥴1
This media is not supported in your browser
VIEW IN TELEGRAM
Кто-то сделал веб-симулятор System Design.
Называется Paperdraw. Он позволяет перетаскивать компоненты (drag & drop) и в реальном времени смотреть, как они ведут себя при реальных условиях: нагрузке, сбоях, задержках и масштабировании.
100% бесплатно можно попробовать.
👉 @KodBlog
Называется Paperdraw. Он позволяет перетаскивать компоненты (drag & drop) и в реальном времени смотреть, как они ведут себя при реальных условиях: нагрузке, сбоях, задержках и масштабировании.
100% бесплатно можно попробовать.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥4👍3👏1
10 скрытых фич EF Core, которые используют сеньоры
1️⃣ Shadow Properties
EF Core позволяет добавлять свойства, которых нет в классе, но которые присутствуют в базе данных.
Идеально подходят, например, для хранения данных аудита, не засоряя сущности лишними полями.
2️⃣ Query Tags
Можно легко добавлять комментарии к SQL-запросам, которые генерирует EF Core.
Удобно при профилировании - в логах SQL сразу видно, откуда пришёл тот или иной медленный запрос.
3️⃣ Compiled Queries
Часто используемые запросы можно скомпилировать заранее, чтобы не тратить ресурсы на парсинг каждый раз.
Повышает производительность при большом числе однотипных запросов.
4️⃣ DbContext Pooling
Вместо того чтобы каждый раз создавать новый
Существенно снижает потребление памяти и повышает производительность.
5️⃣ Value Converters
Позволяют автоматически преобразовывать значения между .NET и базой данных.
Полезно для хранения кастомных типов, enum'ов и Value Object'ов.
6️⃣ Temporal Tables
Позволяют отслеживать историю изменений данных прямо в базе.
Удобно для аудита, отката изменений и анализа исторических данных.
7️⃣ Database Seeding
EF Core 9 добавил новые методы
8️⃣ Split Queries for Includes
Позволяет разбивать сложные запросы с Include на несколько простых.
Избегает проблем с громоздкими JOIN’ами и повышает производительность.
9️⃣ Raw SQL Queries
Можно выполнять чистый SQL прямо из EF Core.
Полезно, когда нужно выжать максимум производительности или использовать специфичный функционал конкретной СУБД.
1️⃣ 0️⃣ Миграции для нескольких баз данных
Можно легко управлять миграциями и схемами сразу для разных провайдеров.
Подходит для приложений, которые должны работать с несколькими СУБД (например, SQL Server, PostgreSQL, MySQL).
👉 @KodBlog
EF Core позволяет добавлять свойства, которых нет в классе, но которые присутствуют в базе данных.
Идеально подходят, например, для хранения данных аудита, не засоряя сущности лишними полями.
Можно легко добавлять комментарии к SQL-запросам, которые генерирует EF Core.
Удобно при профилировании - в логах SQL сразу видно, откуда пришёл тот или иной медленный запрос.
Часто используемые запросы можно скомпилировать заранее, чтобы не тратить ресурсы на парсинг каждый раз.
Повышает производительность при большом числе однотипных запросов.
Вместо того чтобы каждый раз создавать новый
DbContext, можно переиспользовать уже созданные.Существенно снижает потребление памяти и повышает производительность.
Позволяют автоматически преобразовывать значения между .NET и базой данных.
Полезно для хранения кастомных типов, enum'ов и Value Object'ов.
Позволяют отслеживать историю изменений данных прямо в базе.
Удобно для аудита, отката изменений и анализа исторических данных.
EF Core 9 добавил новые методы
UseSeeding, UseAsyncSeeding для удобного наполнения базы начальными данными.Позволяет разбивать сложные запросы с Include на несколько простых.
Избегает проблем с громоздкими JOIN’ами и повышает производительность.
Можно выполнять чистый SQL прямо из EF Core.
Полезно, когда нужно выжать максимум производительности или использовать специфичный функционал конкретной СУБД.
Можно легко управлять миграциями и схемами сразу для разных провайдеров.
Подходит для приложений, которые должны работать с несколькими СУБД (например, SQL Server, PostgreSQL, MySQL).
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾4❤3🥴1
EF Core 9 наконец упрощает сидинг данных.
С
Меньше ручного кода и гораздо более чистая настройка.
Вот код с изображения:
👉 @KodBlog
С
UseSeeding и UseAsyncSeeding теперь можно загружать начальные данные прямо из DbContext.Меньше ручного кода и гораздо более чистая настройка.
Вот код с изображения:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=SeedingEfCore")
.UseAsyncSeeding(async (context, _, cancellationToken) =>
{
if (!await context.Set<Category>().AnyAsync(cancellationToken))
{
await context.Set<Category>().AddRangeAsync(
new Category { Name = "Backend" },
cancellationToken
);
await context.SaveChangesAsync(cancellationToken);
}
});
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾1
C# 15 добавляет union-типы: закрытые наборы вариантов (case types), исчерпывающее pattern matching, неявные преобразования и даже поддержку кастомных union-типов без boxing.
Это серьёзное улучшение удобства для API, которые возвращают «один из нескольких вариантов».
Полный пост: https://devblogs.microsoft.com/dotnet/csharp-15-union-types/
👉 @KodBlog
Это серьёзное улучшение удобства для API, которые возвращают «один из нескольких вариантов».
Полный пост: https://devblogs.microsoft.com/dotnet/csharp-15-union-types/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🍾5❤2🔥1
Выпущен JavaScript-движок Okojo для .NET.
В бенчмарках он более чем в 3 раза быстрее, чем Jint, при этом с низкими аллокациями!
В комплекте расширения: встраивание Wasm, reflection, генерация биндингов с d.ts, runtime, совместимый с Node, отладчик VSCode и многое другое.
За исключением некоторых частей (прямой eval / with и т.д.), базовая реализация проходит test262 почти на 100%!
На данный момент поддерживается только .NET 10.
https://github.com/akeit0/okojo
👉 @KodBlog
В бенчмарках он более чем в 3 раза быстрее, чем Jint, при этом с низкими аллокациями!
В комплекте расширения: встраивание Wasm, reflection, генерация биндингов с d.ts, runtime, совместимый с Node, отладчик VSCode и многое другое.
За исключением некоторых частей (прямой eval / with и т.д.), базовая реализация проходит test262 почти на 100%!
На данный момент поддерживается только .NET 10.
https://github.com/akeit0/okojo
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - akeit0/okojo: Okojo is an experimental low allocation managed JavaScript engine for .NET
Okojo is an experimental low allocation managed JavaScript engine for .NET - akeit0/okojo
👍6🍾2❤1
В .NET 10 формат .slnx стал дефолтным не просто так. Старый формат .sln был разработан в начале 2000-х, когда Visual Studio была единственным инструментом. Он никогда не предназначался для работы с Git.
35 строк с GUID’ами для 3 проектов? Конфликты при мердже каждый раз, когда кто-то добавляет проект? Проприетарный формат, который нельзя валидировать стандартными инструментами?
Формат .slnx решает всё это. 7 строк чистого XML. Без GUID’ов. Git автоматически мерджит добавления проектов. Поддерживается всеми IDE.
«Но у меня уже есть проекты…»
Одна команда: dotnet sln migrate
И всё. Старый .sln остаётся нетронутым, пока ты не проверишь результат. Риск буквально нулевой.
Реальный риск — продолжать использовать старый формат и идти против экосистемы, которая движется вперёд.
Согласен или нет?
👉 @KodBlog
35 строк с GUID’ами для 3 проектов? Конфликты при мердже каждый раз, когда кто-то добавляет проект? Проприетарный формат, который нельзя валидировать стандартными инструментами?
Формат .slnx решает всё это. 7 строк чистого XML. Без GUID’ов. Git автоматически мерджит добавления проектов. Поддерживается всеми IDE.
«Но у меня уже есть проекты…»
Одна команда: dotnet sln migrate
И всё. Старый .sln остаётся нетронутым, пока ты не проверишь результат. Риск буквально нулевой.
Реальный риск — продолжать использовать старый формат и идти против экосистемы, которая движется вперёд.
Согласен или нет?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍5💯2❤1🍾1
Aspire 13.2 тихо завёз суперсилу: теперь твой терминал может читать документацию за тебя.
https://buff.ly/RFUftBI
👉 @KodBlog
aspire docs list → всё
aspire docs search redis → результаты с ранжированием по релевантности
aspire docs get <slug> → полная страница, без браузера
https://buff.ly/RFUftBI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🍾1
Мы Создали Слой Кэша. PostgreSQL Показал, что Зря.
Пользователь открывает страницу свего тарифного плана, а видит старый. Он обновляет страницу, и всё исправляется. Наш показатель попадания в кэш 98%, а мы всё равно выглядели некомпетентными. В тот момент мы перестали рассматривать кэширование как функцию повышения производительности и стали рассматривать его как проблему истинности. Потому что система перестала быть медленной, зато она стала ненадёжной.
Что было дальше🤙
👉 @KodBlog
Пользователь открывает страницу свего тарифного плана, а видит старый. Он обновляет страницу, и всё исправляется. Наш показатель попадания в кэш 98%, а мы всё равно выглядели некомпетентными. В тот момент мы перестали рассматривать кэширование как функцию повышения производительности и стали рассматривать его как проблему истинности. Потому что система перестала быть медленной, зато она стала ненадёжной.
Что было дальше
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
We Built A Cache Layer. PostgreSQL Made It Embarrassing.
A user upgrades their plan and still sees the old one.
😁4👍2🍾2👎1
DataAnnotations против FluentValidationDataAnnotations тоже позволяют валидировать данные с проверкой в базе через кастомный атрибут + IUserRepository.FluentValidation обычно оказывается чище, слабее связан с остальным кодом и проще покрывается тестами.#dotnet #csharp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🍾1
Хватит жонглировать разрозненными инструментами для JSON. 🧱
JSON-everything — это высокопроизводительный, соответствующий стандартам набор инструментов для Schema, Patch, Path и других задач — всё в рамках одной экосистемы .NET. Открытый исходный код, ориентирован на современные сценарии разработки.
https://hubs.li/Q04bsKZy0
👉 @KodBlog
JSON-everything — это высокопроизводительный, соответствующий стандартам набор инструментов для Schema, Patch, Path и других задач — всё в рамках одной экосистемы .NET. Открытый исходный код, ориентирован на современные сценарии разработки.
https://hubs.li/Q04bsKZy0
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - json-everything/json-everything: System.Text.Json-based support for all of your JSON needs.
System.Text.Json-based support for all of your JSON needs. - json-everything/json-everything
❤4🍾1
Забирай мой подход для упрощения управления потоками:
(начиная с .NET 9)
Вместо классического
Вместе с ним появился метод
Этот тип даёт более удобную синхронизацию потоков через свой API.
Оператор
В таком случае он использует новый API, а не классический механизм.
Смотри код ниже.
Что думаешь про это нововведение?
👉 @KodBlog
(начиная с .NET 9)
Вместо классического
System.Threading.Monitor в .NET 9 появился новый тип — System.Threading.Lock.Вместе с ним появился метод
Lock.EnterScope(), который создаёт эксклюзивную область и автоматически освобождает блокировку после выхода из блока кода.Этот тип даёт более удобную синхронизацию потоков через свой API.
Оператор
lock в C# умеет распознавать, когда целью блокировки выступает объект Lock.В таком случае он использует новый API, а не классический механизм.
Смотри код ниже.
Что думаешь про это нововведение?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4🤣3❤2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Cleanpilot — современная альтернатива CCleaner, написанная на C# / WinUI 3, полностью работающая на основе winapp2.ini
Публичная превью-версия уже доступна : https://github.com/builtbybel/Cleanpilot/
👉 @KodBlog
Публичная превью-версия уже доступна : https://github.com/builtbybel/Cleanpilot/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🍾2
Большинство .NET-разработчиков в 2026 всё ещё копируют строки подключения между файлами appsettings.json.
В прошлом месяце у меня было 4 сервиса в одном решении. У каждого — своя строка подключения к PostgreSQL. Логирование настроено по-разному. Проверки состояния были только в двух.
Потом строка подключения изменилась. Я обновил 3 проекта. Про четвёртый забыл. Потратил 45 минут на отладку, пытаясь понять, почему один сервис падает с ошибками подключения, а остальные работают нормально.
В этот момент я перенёс всё на .NET Aspire.
➡️ Строки подключения? Определяются один раз в AppHost. Подставляются во все сервисы автоматически.
➡️ Логирование? Настраивается один раз в ServiceDefaults. Применяется ко всем сервисам.
➡️ Проверки состояния? Встроены. WaitFor() управляет порядком запуска.
➡️ Наблюдаемость? Трейсы, метрики и структурированные логи через OpenTelemetry. Без дополнительной стоимости.
«Но Aspire только для Azure». Нет. Я деплою в AWS. Aspire управляет локальной разработкой. Облачная платформа отвечает за продакшн. Это разные зоны ответственности.
«Но это добавляет сложность». Сложнее, чем поддерживать 5 разных конфигураций логирования для 5 сервисов? Сложнее, чем ловить рассинхронизацию строк подключения ночью?
Настоящая сложность — это связующий код, который вы пишете сейчас. Aspire его убирает.
Моё правило: 2+ сервиса с общей инфраструктурой — использовать Aspire. Меньше — можно обойтись без него.
👉 @KodBlog
В прошлом месяце у меня было 4 сервиса в одном решении. У каждого — своя строка подключения к PostgreSQL. Логирование настроено по-разному. Проверки состояния были только в двух.
Потом строка подключения изменилась. Я обновил 3 проекта. Про четвёртый забыл. Потратил 45 минут на отладку, пытаясь понять, почему один сервис падает с ошибками подключения, а остальные работают нормально.
В этот момент я перенёс всё на .NET Aspire.
«Но Aspire только для Azure». Нет. Я деплою в AWS. Aspire управляет локальной разработкой. Облачная платформа отвечает за продакшн. Это разные зоны ответственности.
«Но это добавляет сложность». Сложнее, чем поддерживать 5 разных конфигураций логирования для 5 сервисов? Сложнее, чем ловить рассинхронизацию строк подключения ночью?
Настоящая сложность — это связующий код, который вы пишете сейчас. Aspire его убирает.
Моё правило: 2+ сервиса с общей инфраструктурой — использовать Aspire. Меньше — можно обойтись без него.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👏3
Наш слон: собрал полноценный движок инференса LLM на C#/.NET 10. С нуля. 🐘
Не обёртка — нативная загрузка GGUF, токенизатор BPE, механизм внимания, KV-кэш, SIMD-векторизованные CPU-ядра, CUDA-бэкенд для GPU, API, совместимый с OpenAI.
Один разработчик, ~2 месяца, с использованием ИИ (без вайбкодинга). Первый превью-релиз уже доступен.
Подробнее: https://kokosa.dev/blog/2026/dotllm/ и https://dotllm.dev/
👉 @KodBlog
Не обёртка — нативная загрузка GGUF, токенизатор BPE, механизм внимания, KV-кэш, SIMD-векторизованные CPU-ядра, CUDA-бэкенд для GPU, API, совместимый с OpenAI.
Один разработчик, ~2 месяца, с использованием ИИ (без вайбкодинга). Первый превью-релиз уже доступен.
Подробнее: https://kokosa.dev/blog/2026/dotllm/ и https://dotllm.dev/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤5👏3👍1
C#-приложения с файловой моделью и поддержкой нескольких файлов — кому-то нужно? Появится в .NET 10.0.300 и будущих превью .NET 11
@dotnet
https://github.com/DamianEdwards/runfile/compare/main...include-directive
👉 @KodBlog
@dotnet
https://github.com/DamianEdwards/runfile/compare/main...include-directive
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
.NET 11 Preview 3 приносит обновления для
— Улучшения поддержки объединённых типов в средах разработки (полифилы всё ещё требуются)
—`dotnet run -e` (встроенные переменные окружения)
— Файловые приложения → поддержка нескольких файлов (
— Улучшения
и другое...
👉 @KodBlog
dotnet run и развитие поддержки объединённых типов — Улучшения поддержки объединённых типов в средах разработки (полифилы всё ещё требуются)
—`dotnet run -e` (встроенные переменные окружения)
— Файловые приложения → поддержка нескольких файлов (
#:include)— Улучшения
dotnet watch с интеграцией Aspireи другое...
Please open Telegram to view this post
VIEW IN TELEGRAM
Microsoft News
.NET 11 Preview 3 is now available!
Find out about the new features in .NET 11 Preview 3 across the .NET runtime, SDK, libraries, ASP.NET Core, .NET MAUI, C#, Entity Framework Core, container images, and more!
🍾1
.NET 11 Preview 3 приносит важное обновление в EF Core:
Теперь можно выполнять запросы к JSON в SQL Server напрямую из LINQ
❌ Раньше: ручной SQL + JSON_VALUE
✅ Теперь: JsonContains
Меньше кода, чище и проще сопровождать.
👉 @KodBlog
Теперь можно выполнять запросы к JSON в SQL Server напрямую из LINQ
Меньше кода, чище и проще сопровождать.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3😁3🍾3🤔1
.NET 10 включает dnx — по сути аналог npx для .NET.
Скачивает и запускает локальный MCP-сервер. Установка не требуется.
Работает с MCP-серверами для NuGet, Azure, Bicep, Power Platform. Добавляешь в mcp.json — и готово.
Тихое, но важное изменение для AI-инструментария.
👉 @KodBlog
dnx NuGet.Mcp.Server --yes
Скачивает и запускает локальный MCP-сервер. Установка не требуется.
Работает с MCP-серверами для NuGet, Azure, Bicep, Power Platform. Добавляешь в mcp.json — и готово.
Тихое, но важное изменение для AI-инструментария.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🍾2
Отличная статья о том, как многие инициативы в C#, dotnet и aspnetcore за последние годы складываются в единую историю: https://makarchie.com/posts/csharp-that-looks-like-go-file-based-apps/
👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
makarchie Tech
C# That Looks Like Go: Building a Web API Without a .csproj
A walkthrough of building a real ASP.NET Core web API as a .NET 11 file-based app. No .csproj, no .sln, publishes to a ~30 MB native AOT binary. Includes the EF Core migrations workaround.
🍾3