Навигация по аутентификации идентификации: от LDAP к современным протоколам
March 28, 2024
При построении механизма аутентификации для сетевых приложений инженеры сталкиваются с различными вариантами выбора. Один из подходов заключается в разработке собственного механизма аутентификации, что может быть подходящим для некоторых новых приложений. Другой подход — использование широко признанных популярных стандартов, что не только способствует совместимости с устаревшими приложениями, но и обеспечивает взаимодействие с другими сервисами, упрощая процесс интеграции. Поэтому глубокое понимание распространенных технологий аутентификации имеет решающее значение для создания надежных и совместимых сервисов аутентификации.
LDAP / Active Directory
LDAP (Lightweight Directory Access Protocol) — это протокол на основе IP, специально разработанный для доступа к службам каталогов. Стоит отметить, что Active Directory от Microsoft также поддерживает этот протокол.
Службы каталогов представляют собой особую форму базы данных, которая организует различные ресурсы (такие как пользователи, организации, устройства и т.д.) с использованием уникальных идентификаторов. Такое структурированное хранение данных позволяет клиентам запрашивать необходимые ресурсы в базе данных с использованием определенного синтаксиса поиска. Для ресурсов, хранящихся в службах каталогов, они могут содержать богатую информацию о атрибутах, таких как имя пользователя, электронная почта, номер телефона и т.д. Для конкретных серверов LDAP обычно существуют встроенные шаблоны, которые определяют требования к ключам и значениям атрибутов, обеспечивая точность данных.
В корпоративных средах приложения LDAP/Active Directory особенно широко распространены. Предприятия могут хранить информацию о сотрудниках в иерархической структуре, основанной на их отделах, и каждый ресурс "пользователь" может хранить основную информацию и учетные данные сотрудников.
Интеграция LDAP в приложения
Для многих существующих приложений интеграция протокола LDAP стала важной функцией, либо встроенной, либо реализованной на основе механизмов расширения. В качестве примера можно привести Apache APISIX, который успешно реализовал интеграцию LDAP через гибкий механизм плагинов. Эта интеграция позволяет клиентам отправлять имена пользователей и пароли в формате basic auth, затем запрашивать и проверять учетные данные пользователя на сервере LDAP, эффективно защищая запросы API.
В приложениях и сервисах, разработанных инженерами, также можно использовать протокол LDAP для реализации функций управления пользователями и аутентификации. Используя библиотеки клиентов LDAP, предоставляемые конкретными языками программирования, легко подключиться к службам LDAP. После установления соединения можно использовать API Search для запроса ресурсов в каталоге и получения необходимых атрибутов пользователя.

Преимущества и недостатки LDAP
Преимущества
-
Централизованное хранение и эффективный поиск: Данные централизованно хранятся в службах каталогов, и их организационная структура значительно повышает скорость поиска, что упрощает обработку большого количества запросов на чтение.
-
Интуитивная древовидная структура: Древовидная структура служб каталогов тесно напоминает организационную структуру реального мира, что позволяет удобно индексировать ресурсы на листовых узлах, что соответствует интуиции пользователей.
-
Широкая интеграция с приложениями: Благодаря своей зрелости и стабильности, протокол LDAP обеспечивает встроенную поддержку интеграции во многих программных продуктах.
Недостатки
-
Устаревший протокол: Протокол LDAP был разработан в более ранние времена, используя кодировку ASN.1, которая значительно отличается от современного формата JSON, что делает интеграцию несколько сложной.
-
Ограниченная функциональность и проблемы совместимости: Сам протокол имеет ограниченную функциональность, что приводит к тому, что некоторые серверные программы LDAP вынуждены расширять функциональность через нестандартные методы, что может повлиять на совместимость между различными серверами LDAP.
-
Сложная настройка и проблемы безопасности: Настройка сервера LDAP включает множество факторов безопасности, таких как TLS и контроль доступа к данным, что требует богатого опыта для обеспечения правильной настройки, в противном случае существует риск утечки данных.
-
Сложность реализации в приложениях: С точки зрения приложения, доступ к серверам LDAP аналогичен доступу к базам данных, что требует использования низкоуровневых API, таких как Search, для доступа к данным, что предъявляет высокие требования к разработчикам приложений.
Модернизация LDAP
Хотя протокол LDAP может казаться несколько устаревшим в современной технологической среде, он по-прежнему широко поддерживается многими основными программными продуктами как классический стандарт. Многие предприятия по-прежнему полагаются на LDAP для управления различными ресурсами внутри организации, и его стабильность и надежность подтверждены на практике.
Чтобы преодолеть некоторые ограничения протокола LDAP в современных приложениях, появились некоторые промежуточные продукты. Эти продукты инкапсулируют протокол LDAP внутри и предоставляют более современные и удобные интерфейсы протоколов, такие как OpenID Connect:
- Dex: https://dexidp.io
- Keycloak: https://www.keycloak.org
Они занимаются преобразованием и адаптацией протоколов, предоставляя современные протоколы для уменьшения нагрузки на разработчиков приложений.
Эти промежуточные продукты отвечают за преобразование и адаптацию протоколов, предоставляя разработчикам приложений более современные и эффективные методы интеграции, что эффективно снижает нагрузку, необходимую для интеграции LDAP.
Механизм аутентификации на основе HTTP
В области аутентификации протоколы на основе HTTP играют важную роль. OpenID Connect (OIDC), SAML и CAS являются одними из представителей.
OpenID Connect
OpenID Connect — это расширение OAuth 2, предоставляющее не только возможности авторизации, но и расширяющее возможности аутентификации. По сравнению с ограниченной функциональностью OAuth 2, OIDC предлагает более богатые функции, такие как основная функциональность id_token и стандарты OIDC discovery.
Преимущество OIDC заключается в его широком применении и богатой экосистеме. Зрелые реализации серверов и клиентов доступны на различных языках программирования, что облегчает интеграцию и развертывание. Кроме того, OIDC можно комбинировать с другими технологиями, например, использовать JSON Web Tokens (JWT) в качестве токенов, используя их безсостоятельность для снижения нагрузки на сервисы аутентификации.
CAS
CAS (Central Authentication Service) — это широко используемый протокол аутентификации в веб-сценариях, используемый для реализации функции единого входа. Протокол CAS относительно прост в проектировании и легко интегрируется в различные приложения. Кроме того, он может использоваться в производственной среде. Стоит отметить, что платформы управления аутентификацией, такие как Keycloak, также поддерживают протокол CAS, что расширяет область его применения.
SAML
SAML (Security Assertion Markup Language) — это давно существующий протокол аутентификации, текущая версия SAML 2.0 была выпущена в 2005 году. Протокол использует XML в качестве метода кодирования для взаимодействия между сервисами и определяет уникальные структуры данных. Однако из-за относительно сложной реализации SAML и менее интуитивного и прямого использования его преимущества не так очевидны по сравнению с современными протоколами аутентификации, такими как OIDC и CAS.
Тем не менее, решения для управления идентификацией и доступом, такие как Keycloak, по-прежнему предоставляют серверные реализации SAML для удовлетворения потребностей аутентификации в определенных сценариях.

Синхронизация и управление идентификацией пользователей
Рассмотрим распространенный сценарий: предприятие предоставляет своим сотрудникам несколько внутренних прикладных систем и использует единый вход для улучшения пользовательского опыта. Однако каждый раз, когда новый сотрудник присоединяется или старый уходит, ИТ-администраторам необходимо вручную создавать или удалять учетные записи в различных системах, что не только утомительно, но и сопровождается потенциальными рисками безопасности.
Для решения этой проблемы ИТ-администраторам срочно необходим стандартизированный, автоматизированный инструмент управления учетными записями пользователей. Именно в этом контексте появляется стандарт SCIM (System for Cross-domain Identity Management).
Стандарт SCIM определяет серию конкретных REST API, предназначенных для достижения бесшовной совместимости между IDP (поставщиками идентификации) и прикладными системами или SaaS-сервисами. С помощью этих API пользователи могут автоматически настраивать учетные записи, что значительно упрощает процесс создания, обновления и удаления учетных записей.
С момента своего появления протокол SCIM получил широкое распространение и применение. Например, известные решения для управления идентификацией, такие как Microsoft Entra ID (ранее Azure Active Directory) и Okta, поддерживают протокол SCIM. Кроме того, открытые платформы управления идентификацией и доступом, такие как Keycloak, также предоставляют расширения SCIM сервер/клиент, что еще больше расширяет их области применения.
Заключение
В этой статье кратко описаны основные технологии, широко используемые в сценариях аутентификации. В процессе создания эффективных и безопасных сервисов аутентификации эти зрелые технические решения играют важную роль. Они не только значительно упрощают работу по интеграции и повышают эффективность работы, но и эффективно снижают риски безопасности, обеспечивая безопасность корпоративных данных и информации пользователей. Используя эти технологические решения, мы можем лучше удовлетворять требованиям современной аутентификации, предоставляя более удобный и безопасный опыт как для предприятий, так и для пользователей.