Dex — это служба идентификации, которая использует OpenID Connect для аутентификации других приложений.
Dex действует как портал для других поставщиков удостоверений через «соединители». Это позволяет dex откладывать аутентификацию на серверах LDAP, поставщиках SAML или установленных поставщиках удостоверений, таких как GitHub, Google и Active Directory. Клиенты пишут свою логику аутентификации один раз, чтобы общаться с dex, затем dex обрабатывает протоколы для данного бэкэнда.
Токены идентификатора — это расширение OAuth2, представленное OpenID Connect и основная функция dex. Токены идентификатора — это веб-токены JSON (JWT), подписанные dex и возвращаемые как часть ответа OAuth2, подтверждающего личность конечного пользователя. Пример JWT может выглядеть так:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
Токены идентификатора содержат стандартные утверждения, подтверждающие, в какое клиентское приложение вошел пользователь, когда истечет срок действия токена, а также личность пользователя.
{
"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 и содержат стандартные утверждения, другие службы могут использовать их в качестве учетных данных между службами. К системам, которые уже могут использовать токены OpenID Connect ID, выпущенные dex, относятся:
Подробную информацию о том, как запросить или проверить токен идентификатора, см. в разделе «Написание приложений, использующих dex» .
Dex изначально работает поверх любого кластера Kubernetes с использованием пользовательских определений ресурсов и может управлять аутентификацией сервера API через плагин OpenID Connect. Клиенты, такие как kubernetes-dashboard
и kubectl
, могут действовать от имени пользователей, которые могут войти в кластер через поддержку любого поставщика удостоверений dex.
Когда пользователь входит в систему через dex, его личность обычно сохраняется в другой системе управления пользователями: каталоге LDAP, организации GitHub и т. д. Dex действует как прокладка между клиентским приложением и вышестоящим поставщиком удостоверений. Клиенту достаточно понимать OpenID Connect, чтобы запрашивать dex, тогда как dex реализует массив протоколов для запроса других систем управления пользователями.
«Коннектор» — это стратегия, используемая dex для аутентификации пользователя у другого поставщика удостоверений. Dex реализует соединители, предназначенные для конкретных платформ, таких как GitHub, LinkedIn и Microsoft, а также для таких установленных протоколов, как LDAP и SAML.
В зависимости от ограничений соединителей в протоколах dex может помешать выдаче токенов обновления или возврату утверждений о членстве в группе. Например, поскольку SAML не предоставляет неинтерактивного способа обновления утверждений, если пользователь входит в систему через соединитель SAML, dex не выдаст токен обновления своему клиенту. Поддержка токена обновления требуется для клиентов, которым требуется автономный доступ, например kubectl
.
Dex реализует следующие соединители:
Имя | поддерживает токены обновления | поддерживает претензии групп | поддерживает утверждение предпочтительного_имя_пользователя | статус | примечания |
---|---|---|---|---|---|
ЛДАП | да | да | да | стабильный | |
GitHub | да | да | да | стабильный | |
SAML 2.0 | нет | да | нет | стабильный | ВНИМАНИЕ: не поддерживается и, вероятно, уязвим для обхода аутентификации (#1884). |
GitLab | да | да | да | бета | |
OpenID Connect | да | да | да | бета | Включает Salesforce, Azure и т. д. |
ОАутентификация 2.0 | нет | да | да | альфа | |
да | да | да | альфа | ||
да | нет | нет | бета | ||
Майкрософт | да | да | нет | бета | |
АвторизацияПрокси | нет | да | нет | альфа | Прокси-серверы аутентификации, такие как Apache2 mod_auth и т. д. |
Битбакет-облако | да | да | нет | альфа | |
Опеншифт | да | да | нет | альфа | |
Атласская толпа | да | да | да * | бета | Утверждение предпочтительного_имя_пользователя должно быть настроено через конфигурацию |
Гитеа | да | нет | да | бета | |
OpenStack Keystone | да | да | нет | альфа |
Стабильные, бета- и альфа-версии определяются как:
Обо всех изменениях или прекращении поддержки функций соединителя будет объявлено в примечаниях к выпуску.
Подробную информацию о сообщении об уязвимостях см. в нашей политике безопасности.
Когда все кодирование и тестирование завершено, запустите набор тестов:
make testall
Для удобства разработчика установите Nix и direnv.
Альтернативно установите Go и Docker вручную или с помощью менеджера пакетов. Установите остальные зависимости, запустив make deps
.
Информацию о процессе выпуска см. в документации по выпуску.
Проект распространяется по лицензии Apache версии 2.0.