
Провайдер идентификации OpenID Connect (OIDC) и OAuth 2.0 с подключаемыми коннекторами

Dex — это сервис идентификации, который использует OpenID Connect для обеспечения аутентификации других приложений.
Dex действует как шлюз к другим провайдерам идентификации через "коннекторы". Это позволяет dex делегировать аутентификацию серверам LDAP, провайдерам SAML или устоявшимся провайдерам идентификации, таким как GitHub, Google и Active Directory. Клиенты пишут свою логику аутентификации один раз для взаимодействия с dex, а затем dex обрабатывает протоколы для конкретного бэкенда.
ID-токены — это расширение OAuth2, представленное OpenID Connect и являющееся основной функцией dex. ID-токены — это JSON Web Tokens (JWT), подписанные dex и возвращаемые в составе ответа OAuth2, которые подтверждают личность конечного пользователя. Пример JWT может выглядеть так:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCO2k2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
ID-токены содержат стандартные утверждения, которые указывают, какое клиентское приложение выполнило вход пользователя, когда истекает срок действия токена, а также личность пользователя.
{
"iss": "http://127.0.0.1:5556/dex",
"sub": "CgcyMzQyNzQ5EgZnaXRodWI",
"aud": "example-app",
"exp": 1492882042,
"iat": 1492795642,
"at_hash": "bi96gOXZShvlWYtal9Eqiw",
"email": "[email protected]",
"email_verified": true,
"groups": [
"admins",
"developers"
],
"name": "Jane Doe"
}
Поскольку эти токены подписаны dex и содержат утверждения на основе стандартов, другие сервисы могут использовать их в качестве учётных данных для взаимодействия между сервисами. Системы, которые уже умеют принимать ID-токены OpenID Connect, выпущенные dex, включают:
Подробнее о том, как запросить или проверить ID-токен, см. в "Создание приложений, использующих dex".
Dex работает нативно поверх любого кластера Kubernetes с использованием Custom Resource Definitions и может обеспечивать аутентификацию API-сервера через плагин OpenID Connect. Клиенты, такие как kubelogin и kubectl, могут действовать от имени пользователей, которые могут войти в кластер через любого провайдера идентификации, поддерживаемого dex.
Когда пользователь входит через dex, его личность обычно хранится в другой системе управления пользователями: каталоге LDAP, организации GitHub и т. д. Dex действует как прослойка между клиентским приложением и вышестоящим провайдером идентификации. Клиенту достаточно понимать OpenID Connect для запросов к dex, в то время как dex реализует множество протоколов для запросов к другим системам управления пользователями.

"Коннектор" — это стратегия, используемая dex для аутентификации пользователя через другого провайдера идентификации. Dex реализует коннекторы, нацеленные на конкретные платформы, такие как GitHub, LinkedIn и Microsoft, а также устоявшиеся протоколы, такие как LDAP и SAML.
В зависимости от коннекторов ограничения протоколов могут препятствовать выпуску dex refresh-токенов или возврату утверждений о членстве в группах. Например, поскольку SAML не предоставляет неинтерактивного способа обновления утверждений, если пользователь входит через коннектор SAML, dex не выпустит refresh-токен для своего клиента. Поддержка refresh-токенов требуется клиентам, которым нужен офлайн-доступ, таким как kubectl.
Dex реализует следующие коннекторы:
Стабильный, бета и альфа определяются следующим образом:
Все изменения или устаревания функций коннекторов будут объявлены в примечаниях к выпускам.
См. официальную документацию для начала работы, настройки и руководств по использованию.
Пожалуйста, ознакомьтесь с нашей политикой безопасности для получения подробной информации о сообщении об уязвимостях.
Пожалуйста, см. CONTRIBUTING.md для настройки окружения разработки, руководств и информации о том, как отправлять pull request.
Проект лицензирован в соответствии с Apache License, Version 2.0.
| Название | поддержка refresh-токенов | поддержка утверждения groups | поддержка утверждения preferred_username | Статус | Примечания |
|---|
| LDAP | да | да | да | стабильный | |
| GitHub | да | да | да | стабильный | |
| SAML 2.0 | нет | да | нет | стабильный | ВНИМАНИЕ: Не поддерживается и, вероятно, уязвим к обходу аутентификации (#1884) |
| GitLab | да | да | да | бета | |
| OpenID Connect | да | да | да | бета | Включает Salesforce, Azure и т. д. |
| OAuth 2.0 | нет | да | да | альфа | |
| да | да | да | альфа | ||
| да | нет | нет | бета | ||
| Microsoft | да | да | нет | бета | |
| AuthProxy | нет | да | нет | альфа | Прокси-серверы аутентификации, такие как Apache2 mod_auth и т. д. |
| Bitbucket Cloud | да | да | нет | альфа | |
| OpenShift | да | да | нет | альфа | |
| Atlassian Crowd | да | да | да * | бета | Утверждение preferred_username должно быть настроено через конфигурацию |
| Gitea | да | нет | да | бета | |
| OpenStack Keystone | да | да | нет | альфа |