Свободный/открытый OpenID Connect провайдер удостоверений для .NET, используемый для аутентификации фальшивых пользователей в автоматических тестах.

Вопрос или проблема

Предыстория

У нас есть веб-приложение, которое будет интегрироваться с внутренним OIDC-провайдером нашей компании с использованием OpenID Connect. Это достаточно просто, мы уже внесли изменения для поддержки этого. В настоящее время в нашем приложении используется “фальшивая аутентификация” для среды, где мы запускаем автоматизированные сквозные тесты. Это созданная нами схема аутентификации на основе куки с множеством защит, чтобы гарантировать, что она не может быть активирована в продакшне (включая директивы компилятора для исключения этого кода в CI-пайплайне).

Дополнительно усложняет задачу усилие по модернизации архитектуры нашего приложения. Команда выбрала веб-API на базе .NET и одностраничное приложение на Angular. В течение длительного времени наше “приложение” будет фактически разделено на два разных приложения на .NET: старое .NET 4 приложение ASP.NET MVC и новое веб-API на .NET 8+ с последней версией Angular. Мы планируем постепенно переносить страницы из старого приложения в новое.

Почему существующие решения не подходят

У нас есть 2 000 автоматизированных сквозных тестов1, которые часто требуют пользователей с очень специфическими правами в нашей системе, поэтому создание фальшивых профилей пользователей в нашем приложении необходимо, чтобы мы могли управлять этими правами.

Внутренний OIDC-провайдер нашей компании поддерживается отдельной командой как корпоративное решение. Он тесно связан с Active Directory. Если вы не человек, работающий на компанию, они не создадут профиль пользователя в провайдере OIDC. Жесткий отказ. Исключений нет. Создание “тестовых” учетных записей не является вариантом по политическим причинам.

Я пытался искать это, но постоянно нахожу библиотеки и пакеты NuGet для интеграции с провайдером OIDC, а не стать провайдером OIDC. Я просматривал список инструментов на C# от OpenID.net, и те, которые в настоящее время поддерживаются, не являются бесплатными, а те, что бесплатные, более не поддерживаются.

Я нашел Oidc.Provider, совместимый с .NET 8, но он не обновлялся с 2021 года, и я не нашел для него общедоступного репозитория исходного кода, что делает меня немного сомневающимся в его использовании.

Цели

  • Использовать OIDC-провайдер под нашим контролем для запуска автоматизированных тестов локально на ноутбуке и в нашем CI/CD-пайплайне.
  • Избавиться от нашей собранной “фальшивой аутентификации”, потому что она всегда вызывала у меня чувство тревоги.
  • Использовать тот же OIDC-провайдер в старом приложении .NET 4 и в новом приложении Angular.
    • это значит, что нам не нужно собирать вторую “фальшивую аутентификацию”.

Обязательные требования

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

  1. Версия OpenID Connect должна поддерживаться клиентскими библиотеками Microsoft для интеграции OIDC.
  2. Библиотека или приложение должны быть с открытым исходным кодом, чтобы мы могли сканировать исходный код на наличие уязвимостей.
  3. Стоимость должна быть бесплатной для бизнес- или правительственных организаций. Мы не являемся проектом с открытым исходным кодом и не являемся некоммерческой организацией.
  4. JWT будут использоваться обоими нашими приложениями.
  5. OIDC-провайдер будет размещаться на виртуальных машинах Windows Server, которые мы поддерживаем. Мы можем войти с привилегиями администратора, чтобы настроить все.
  6. OIDC-провайдер может быть в любой из следующих форм:
    • .NET 8+/.NET Standard библиотека, которую мы можем использовать в новом пустом веб-приложении на .NET 8. Мы команда опытных разработчиков .NET, любящих поэкспериментировать с вещами.
    • Отдельное веб-приложение, способное размещаться в IIS. Установщик не обязателен.
    • Если решения на .NET не существует, мы можем рассмотреть другие технологические стеки, если они работают на веб-сервере IIS на машине Windows Server.
  7. Хранилище данных:
    • Если требуется база данных, у нас есть доступ только к базе данных SQL Server.
    • Мы также можем использовать файловое хранилище, если это необходимо.

Дополнительные требования

  • Веб-API точки для управления пользователями, хотя мы вполне способны создать их сами, если мы можем подключиться к тому же хранилищу данных.
  • Установка и настройка OIDC-провайдера локально на ноутбуке для автоматизированных тестов.

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

Ответ или решение

Введение
Когда речь идет о внедрении OpenID Connect для аутентификации в вашей веб-приложении, это требует основательной подготовки, особенно если цель – интеграция с внутренним OIDC-провайдером компании и замена текущей самодельной системы аутентификации. Проблему усугубляет архитектурная модернизация приложения, предполагающая использование .NET веб-API и Angular. Альтернативы легко найти для интеграции с OIDC, но задача сложнее, когда требуется создать собственный провайдер OIDC. Ваша цель – найти бесплатное и поддерживаемое open-source решение, соответствующее требованиям проекта.

Теория
OpenID Connect – это аутентификационный протокол, базирующийся на OAuth 2.0. Он позволяет приложениям проверять идентичность пользователя, на основе аутентификации, выполненной авторизующим сервером, а также получать базовую информацию о профиле пользователя. Протокол широко используется как в корпоративных, так и в открытых проектах, благодаря его безопасности и возможности расширяемости. Основные задачи при внедрении OIDC провайдера – обеспечить согласованность данных, безопасность токенов, простоту взаимодействия с клиентскими приложениями и корректное управление доступом пользователей.

Пример
Существуют различные open-source проекты, которые могут соответствовать вашим требованиям. Однако, важно учитывать, что решение, выбранное для автоматизированного тестирования, должно быть не только бесплатным и поддерживаемым, но также легким в настройке и администрировании на Windows Server в рамках IIS. Вы можете рассмотреть проекты, такие как IdentityServer4 или OpenIddict. Эти решения обеспечивают гибкость и могут быть адаптированы под вашу инфраструктуру с небольшими затратами ресурсов.

IdentityServer4 ранее был одним из самых популярных open-source решений для реализации провайдера OpenID Connect, поддерживающего .NET Core. OpenIddict, как альтернативное решение, также имеет открытый исходный код, поддерживает .NET и предлагает высокую гибкость в настройке. Оба решения способны удовлетворить большинство ваших требований, включая интеграцию с SQL Server для хранения данных о пользователях.

Применение
Учитывая, что вы используете .NET 8+ и вынуждены поддерживать среду выполнения как на старых, так и на новых приложениях, возможно, более целесообразно обратить внимание на OpenIddict. Это решение совместимо с последними версиями .NET и предлагает большую актуальность в поддержке. Оно позволяет самостоятельно настраивать провайдера OIDC, внедряя все необходимые процессы аутентификации и авторизации пользователей на всех уровнях вашего приложения.

Установка и настройка OpenIddict потребуют создания веб-приложения на ASP.NET Core, которое можно развернуть в IIS. Это включает настройки для выпусков JWT токенов и работы с SQL Server для хранения профилей и прав пользователей. Примерная последовательность шагов для внедрения:

1. Создайте новое .NET Core приложение, используя шаблон Web API.
2. Добавьте OpenIddict в проект через NuGet, сконфигурировав его для работы с SQL Server, чтобы сохранять данные о сессиях и пользователях.
3. Настройте конфигурацию для выпуска JWT токенов с необходимыми claims для сопоставления с вашими пользовательскими ролями и правами.
4. Разверните приложение в IIS на вашем Windows Server, обеспечив его доступность для ваших тестовых сред.

Таким образом, OpenIddict выступит надежным провайдером OIDC для ваших автоматических тестов в локальной среде и CI/CD пайплайнах, минимизируя риски и усилия на поддержание отдельных систем аутентификации для разных фрагментов вашего приложения. Это позволяет сосредоточиться на долгосрочной миграции и модернизации, сведя к минимуму сложности переходного периода.

Заключение
Решение вопроса выбором подходящего OIDC провайдера сыграет ключевую роль в успехе модернизации вашего продукта. Адекватная реализация позволит не только упростить текущие тестовые процедуры, но и гармонично интегрироваться в будущие архитектурные изменения, обеспечивая безопасность и управляемость пользовательских данных в полном объеме.

Оцените материал
Добавить комментарий

Капча загружается...