Dex는 OpenID Connect를 사용하여 다른 앱에 대한 인증을 구동하는 ID 서비스입니다.
Dex는 "커넥터"를 통해 다른 ID 공급자에 대한 포털 역할을 합니다. 이를 통해 dex는 LDAP 서버, SAML 공급자 또는 GitHub, Google, Active Directory와 같은 기존 ID 공급자에 대한 인증을 연기할 수 있습니다. 클라이언트는 dex와 통신하기 위해 인증 로직을 한 번 작성한 다음 dex가 특정 백엔드에 대한 프로토콜을 처리합니다.
ID 토큰은 OpenID Connect 및 dex의 기본 기능에 의해 도입된 OAuth2 확장입니다. ID 토큰은 dex로 서명된 JWT(JSON 웹 토큰)이며 최종 사용자의 신원을 증명하는 OAuth2 응답의 일부로 반환됩니다. JWT의 예는 다음과 같습니다.
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_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로 서명되고 표준 기반 클레임을 포함하므로 다른 서비스에서는 이를 서비스 간 자격 증명으로 사용할 수 있습니다. dex에서 발급한 OpenID Connect ID 토큰을 이미 사용할 수 있는 시스템은 다음과 같습니다.
ID 토큰을 요청하거나 검증하는 방법에 대한 자세한 내용은 "dex를 사용하는 앱 작성"을 참조하세요.
Dex는 사용자 정의 리소스 정의를 사용하여 모든 Kubernetes 클러스터 위에서 기본적으로 실행되며 OpenID Connect 플러그인을 통해 API 서버 인증을 구동할 수 있습니다. kubernetes-dashboard
및 kubectl
과 같은 클라이언트는 ID 공급자 dex 지원을 통해 클러스터에 로그인할 수 있는 사용자를 대신하여 작동할 수 있습니다.
사용자가 dex를 통해 로그인하면 사용자의 ID는 일반적으로 다른 사용자 관리 시스템(LDAP 디렉터리, GitHub 조직 등)에 저장됩니다. Dex는 클라이언트 앱과 업스트림 ID 공급자 간의 심 역할을 합니다. 클라이언트는 dex를 쿼리하기 위해 OpenID Connect만 이해하면 되는 반면, dex는 다른 사용자 관리 시스템을 쿼리하기 위한 일련의 프로토콜을 구현합니다.
"커넥터"는 다른 ID 공급자에 대해 사용자를 인증하기 위해 dex에서 사용하는 전략입니다. Dex는 GitHub, LinkedIn, Microsoft와 같은 특정 플랫폼은 물론 LDAP 및 SAML과 같은 확립된 프로토콜을 대상으로 하는 커넥터를 구현합니다.
프로토콜의 커넥터 제한 사항에 따라 dex가 새로 고침 토큰을 발행하거나 그룹 멤버십 클레임을 반환하지 못할 수 있습니다. 예를 들어 SAML은 어설션을 새로 고치는 비대화형 방법을 제공하지 않기 때문에 사용자가 SAML 커넥터 dex를 통해 로그인하면 해당 클라이언트에 새로 고침 토큰이 발급되지 않습니다. kubectl
과 같이 오프라인 액세스가 필요한 클라이언트에는 새로 고침 토큰 지원이 필요합니다.
Dex는 다음 커넥터를 구현합니다.
이름 | 새로 고침 토큰을 지원합니다 | 그룹 주장을 지지합니다 | Preferred_username 클레임을 지원합니다. | 상태 | 메모 |
---|---|---|---|---|---|
LDAP | 예 | 예 | 예 | 안정적인 | |
GitHub | 예 | 예 | 예 | 안정적인 | |
SAML 2.0 | 아니요 | 예 | 아니요 | 안정적인 | 경고: 관리되지 않으며 인증 우회에 취약할 가능성이 있음(#1884) |
GitLab | 예 | 예 | 예 | 베타 | |
오픈아이디 커넥트 | 예 | 예 | 예 | 베타 | Salesforce, Azure 등이 포함됩니다. |
OAuth 2.0 | 아니요 | 예 | 예 | 알파 | |
예 | 예 | 예 | 알파 | ||
링크드인 | 예 | 아니요 | 아니요 | 베타 | |
마이크로소프트 | 예 | 예 | 아니요 | 베타 | |
인증프록시 | 아니요 | 예 | 아니요 | 알파 | Apache2 mod_auth 등과 같은 인증 프록시 |
비트버킷 클라우드 | 예 | 예 | 아니요 | 알파 | |
오픈시프트 | 예 | 예 | 아니요 | 알파 | |
아틀라시안 크라우드 | 예 | 예 | 예 * | 베타 | Preferred_username 클레임은 구성을 통해 구성되어야 합니다. |
기테아 | 예 | 아니요 | 예 | 베타 | |
오픈스택 키스톤 | 예 | 예 | 아니요 | 알파 |
안정, 베타, 알파는 다음과 같이 정의됩니다.
커넥터 기능의 모든 변경 사항이나 지원 중단은 릴리스 노트에 발표됩니다.
취약점 보고에 대한 자세한 내용은 보안 정책을 참조하세요.
모든 코딩과 테스트가 완료되면 테스트 스위트를 실행하십시오.
make testall
최고의 개발자 경험을 위해서는 Nix와 direnv를 설치하세요.
또는 Go 및 Docker를 수동으로 설치하거나 패키지 관리자를 사용하여 설치하세요. make deps
실행하여 나머지 종속성을 설치합니다.
릴리스 프로세스에 대해서는 릴리스 설명서를 읽어보십시오.
이 프로젝트는 Apache 라이센스 버전 2.0에 따라 라이센스가 부여됩니다.