В последние годы системы аутентификации и авторизации пользователей приобрели особую важность в сфере веб-разработки и облачных сервисов. Одним из наиболее популярных протоколов является OpenID Connect (OIDC), основанный на OAuth 2.0, который обеспечивает безопасную и стандартизированную схему аутентификации. Однако не все популярные OAuth2-провайдеры полностью поддерживают OIDC, что создаёт некоторые сложности при интеграции. Discord, популярная платформа для общения и сообществ, предоставляет мощную и гибкую OAuth2 API, но официально не поддерживает OIDC.
Именно тут на сцену выходит проект Discord-oidc-proxy — удобный прокси-сервер, позволяющий преобразовать Discord в полноценного провайдера OpenID Connect. В этой статье подробно рассмотрим, что представляет собой Discord-oidc-proxy, зачем он нужен, как его настроить и интегрировать с распространёнными сервисами аутентификации, обеспечивая гибкость и безопасность для ваших приложений. Discord-oidc-proxy представляет собой прокси, работающий на платформе Cloudflare Workers, который преобразует стандартные OAuth2 эндпоинты Discord в OIDC-совместимые. За счёт этого приложения, ожидающие классический OIDC-поток для аутентификации, могут без существенных изменений использовать Discord для входа пользователей. Концептуально, проект решает несовместимость между Discord OAuth2 и стандартом OpenID Connect, выступая посредником, который поддерживает все необходимые OIDC-эндпоинты, такие как discovery, authorization, token и userinfo.
Это позволяет интегрировать Discord аутентификацию в множество современных приложений, использующих OIDC без необходимости переписывать логику аутентификации под особенности Discord. Для запуска Discord-oidc-proxy необходимо иметь учётные записи разработчика Discord и Cloudflare. Установка и настройка базируются на использовании Cloudflare Workers, что обеспечивает быстрый, масштабируемый и доступный по всему миру сервис. Процесс включает создание Discord-приложения в Developer Portal, получение Client ID и Client Secret, создание KV пространства в Cloudflare для хранения данных сессий, настройку и деплой проекта через Wrangler CLI. При первом запуске специальный скрипт setup.
sh поможет задать основные параметры и сгенерировать уникальные OIDC Client ID и Client Secret, которые будут использоваться для взаимодействия с клиентскими приложениями. Преимущество работы на Cloudflare Workers в том, что весь трафик обрабатывается на облачной периферии, что позволяет минимизировать задержки и обезопасить сетевые взаимодействия. Кроме того, подобная архитектура не требует выделенного сервера, что значительно упрощает поддержку и масштабирование решения. После успешного развертывания прокси можно приступать к интеграции с клиентскими сервисами. В рамках экосистемы облачной безопасности и доступа, такой как Cloudflare Access, настройка Discord в качестве провайдера OIDC выполняется через добавление нового метода входа с использованием сгенерированных ранее OIDC Client ID и Secret, а также указанием URL-адресов прокси для авторизации, получения токенов и сертификатов.
Важно отметить необходимость включения Proof Key for Code Exchange (PKCE), который повышает безопасность аутентификационного процесса. Помимо Cloudflare, Discord-oidc-proxy отлично подходит для внедрения в Amazon Cognito — популярный сервис управления пользователями и аутентификацией от AWS. Через настройку провайдера OpenID Connect в Cognito можно использовать Discord для входа пользователей в приложения, работающие на базе AWS-инфраструктуры. В Cognito необходимо указать параметры, такие как имя провайдера, client ID, client secret, а также настроить scopes, определяющие, какую информацию о пользователе получает приложение (openid, email, profile и другие). Использование Discord в этом сценарии даёт возможность создавать единую систему входа, упрощая взаимодействие с пользователями, которые уже активно пользуются Discord.
Безопасность является ключевым аспектом при работе с системами аутентификации, и Discord-oidc-proxy уделяет это большое внимание. Разработчики рекомендуют отправлять любые найденные уязвимости напрямую через специализированные каналы, включая GitHub Security Advisory или по электронной почте с использованием PGP-клиента для шифрованного общения. Такой подход позволяет максимально быстро и конфиденциально реагировать на потенциальные угрозы, не раскрывая их публично до выпуска исправлений. Код проекта написан в основном на TypeScript с небольшими участками shell-скриптов для настройки, что гарантирует современный и удобочитаемый код, пригодный для совершенствования и кастомизации в зависимости от потребностей. Репозиторий публикуется под лицензией MIT, что открывает широкие возможности для использования и модификации без юридических осложнений.