
플러그형 커넥터를 지원하는 OpenID Connect (OIDC) 신원 및 OAuth 2.0 제공자

Dex는 OpenID Connect를 사용하여 다른 앱의 인증을 구동하는 identity 서비스입니다.
Dex는 "커넥터"를 통해 다른 identity 제공자로 가는 포털 역할을 합니다. 이를 통해 dex는 LDAP 서버, SAML 제공자, 또는 GitHub, Google, Active Directory 같은 기존 identity 제공자로 인증을 위임할 수 있습니다. 클라이언트는 dex와 통신하기 위해 인증 로직을 한 번만 작성하면 되고, dex는 주어진 백엔드에 대한 프로토콜을 처리합니다.
ID 토큰은 OpenID Connect가 도입한 OAuth2 확장 기능이며 dex의 핵심 기능입니다. ID 토큰은 dex가 서명하고 OAuth2 응답의 일부로 반환되는 JSON Web Token(https://github.com/dexidp/dex/blob/HEAD/JWT)으로, 최종 사용자의 신원을 증명합니다. 예시 JWT는 다음과 같습니다:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCO2kVkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_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가 서명하고 표준 기반 클레임을 포함하므로 다른 서비스가 이 토큰을 서비스 간 자격 증명(service-to-service credentials)으로 소비할 수 있습니다. dex가 발급한 OpenID Connect ID 토큰을 이미 소비할 수 있는 시스템은 다음과 같습니다:
ID 토큰을 요청하거나 검증하는 방법에 대한 자세한 내용은 "dex를 사용하는 앱 작성"을 참조하세요.
Dex는 Custom Resource Definitions를 사용하여 모든 Kubernetes 클러스터 위에서 기본적으로 실행되며 OpenID Connect 플러그인을 통해 API 서버 인증을 구동할 수 있습니다. kubelogin 및 kubectl과 같은 클라이언트는 dex가 지원하는 모든 identity 제공자를 통해 클러스터에 로그인할 수 있는 사용자를 대신하여 작동할 수 있습니다.
사용자가 dex를 통해 로그인하면 사용자의 신원은 일반적으로 LDAP 디렉터리, GitHub 조직 등 다른 사용자 관리 시스템에 저장됩니다. Dex는 클라이언트 앱과 업스트림 identity 제공자 사이의 중간 다리(shim) 역할을 합니다. 클라이언트는 dex를 쿼리하기 위해 OpenID Connect만 이해하면 되며, dex는 다른 사용자 관리 시스템을 쿼리하기 위한 다양한 프로토콜을 구현합니다.

"커넥터"는 dex가 다른 identity 제공자에 대해 사용자를 인증하는 데 사용하는 전략입니다. Dex는 GitHub, LinkedIn, Microsoft 같은 특정 플랫폼을 대상으로 하는 커넥터와 LDAP, SAML 같은 기존 프로토콜을 구현합니다.
커넥터에 따라 프로토콜의 제한으로 인해 dex가 refresh 토큰을 발급하거나 그룹 구성원 클레임을 반환하지 못할 수 있습니다. 예를 들어, SAML은 어서션을 비대화식으로 갱신하는 방법을 제공하지 않으므로 사용자가 SAML 커넥터를 통해 로그인하면 dex는 클라이언트에 refresh 토큰을 발급하지 않습니다. Refresh 토큰 지원은 kubectl과 같이 오프라인 액세스가 필요한 클라이언트에 필수입니다.
Dex는 다음 커넥터를 구현합니다:
Stable, beta, alpha는 다음과 같이 정의됩니다:
커넥터 기능의 모든 변경 또는 폐기는 릴리스 노트에서 공지됩니다.
시작하기, 구성, 사용 가이드는 공식 문서를 참조하세요.
취약점 신고에 대한 자세한 내용은 보안 정책을 참조하세요.
개발 환경 설정, 지침, 풀 리퀘스트 제출 방법은 CONTRIBUTING.md를 참조하세요.
이 프로젝트는 Apache License, Version 2.0에 따라 라이선스가 부여됩니다.
| Name | supports refresh tokens | supports groups claim | supports preferred_username claim | status | notes |
|---|
| LDAP | yes | yes | yes | stable | |
| GitHub | yes | yes | yes | stable | |
| SAML 2.0 | no | yes | no | stable | WARNING: Unmaintained and likely vulnerable to auth bypasses (#1884) |
| GitLab | yes | yes | yes | beta | |
| OpenID Connect | yes | yes | yes | beta | Includes Salesforce, Azure, etc. |
| OAuth 2.0 | no | yes | yes | alpha | |
| yes | yes | yes | alpha | ||
| yes | no | no | beta | ||
| Microsoft | yes | yes | no | beta | |
| AuthProxy | no | yes | no | alpha | Authentication proxies such as Apache2 mod_auth, etc. |
| Bitbucket Cloud | yes | yes | no | alpha | |
| OpenShift | yes | yes | no | alpha | |
| Atlassian Crowd | yes | yes | yes * | beta | preferred_username claim must be configured through config |
| Gitea | yes | no | yes | beta | |
| OpenStack Keystone | yes | yes | no | alpha |