Dex adalah layanan identitas yang menggunakan OpenID Connect untuk mendorong otentikasi untuk aplikasi lain.
Dex bertindak sebagai portal ke penyedia identitas lain melalui "konektor". Hal ini memungkinkan dex menunda autentikasi ke server LDAP, penyedia SAML, atau penyedia identitas mapan seperti GitHub, Google, dan Active Directory. Klien menulis logika autentikasinya satu kali untuk berbicara dengan dex, lalu dex menangani protokol untuk backend tertentu.
Token ID adalah ekstensi OAuth2 yang diperkenalkan oleh OpenID Connect dan fitur utama dex. Token ID adalah Token Web JSON (JWT) yang ditandatangani oleh dex dan dikembalikan sebagai bagian dari respons OAuth2 yang membuktikan identitas pengguna akhir. Contoh JWT mungkin terlihat seperti:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
Token ID berisi klaim standar yang menegaskan aplikasi klien mana yang mencatatkan pengguna, kapan token kedaluwarsa, dan identitas pengguna.
{
"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 "
}
Karena token ini ditandatangani oleh dex dan berisi klaim berbasis standar, layanan lain dapat menggunakannya sebagai kredensial layanan-ke-layanan. Sistem yang sudah dapat menggunakan Token ID OpenID Connect yang dikeluarkan oleh dex meliputi:
Untuk detail tentang cara meminta atau memvalidasi Token ID, lihat "Menulis aplikasi yang menggunakan dex" .
Dex berjalan secara native di atas kluster Kubernetes mana pun menggunakan Definisi Sumber Daya Kustom dan dapat mendorong autentikasi server API melalui plugin OpenID Connect. Klien, seperti kubernetes-dashboard
dan kubectl
, dapat bertindak atas nama pengguna yang dapat login ke cluster melalui dukungan dex penyedia identitas mana pun.
Saat pengguna masuk melalui dex, identitas pengguna biasanya disimpan di sistem manajemen pengguna lain: direktori LDAP, organisasi GitHub, dll. Dex bertindak sebagai penghubung antara aplikasi klien dan penyedia identitas hulu. Klien hanya perlu memahami OpenID Connect untuk menanyakan dex, sementara dex mengimplementasikan serangkaian protokol untuk menanyakan sistem manajemen pengguna lainnya.
"Konektor" adalah strategi yang digunakan oleh dex untuk mengautentikasi pengguna terhadap penyedia identitas lain. Dex mengimplementasikan konektor yang menargetkan platform tertentu seperti GitHub, LinkedIn, dan Microsoft serta protokol yang sudah ada seperti LDAP dan SAML.
Bergantung pada konektor, batasan dalam protokol dapat mencegah dex mengeluarkan token penyegaran atau mengembalikan klaim keanggotaan grup. Misalnya, karena SAML tidak menyediakan cara non-interaktif untuk menyegarkan pernyataan, jika pengguna masuk melalui dex konektor SAML tidak akan mengeluarkan token penyegaran ke kliennya. Dukungan penyegaran token diperlukan untuk klien yang memerlukan akses offline, seperti kubectl
.
Dex mengimplementasikan konektor berikut:
Nama | mendukung token penyegaran | mendukung klaim kelompok | mendukung klaim prefer_username | status | catatan |
---|---|---|---|---|---|
LDAP | Ya | Ya | Ya | stabil | |
GitHub | Ya | Ya | Ya | stabil | |
SAML 2.0 | TIDAK | Ya | TIDAK | stabil | PERINGATAN: Tidak dipelihara dan kemungkinan rentan terhadap bypass autentikasi (#1884) |
GitLab | Ya | Ya | Ya | beta | |
Koneksi OpenID | Ya | Ya | Ya | beta | Termasuk Salesforce, Azure, dll. |
OAuth 2.0 | TIDAK | Ya | Ya | alfa | |
Ya | Ya | Ya | alfa | ||
Ya | TIDAK | TIDAK | beta | ||
Microsoft | Ya | Ya | TIDAK | beta | |
Proksi Otentikasi | TIDAK | Ya | TIDAK | alfa | Proxy otentikasi seperti Apache2 mod_auth, dll. |
Awan Bitbucket | Ya | Ya | TIDAK | alfa | |
Pergeseran Terbuka | Ya | Ya | TIDAK | alfa | |
Kerumunan Atlassian | Ya | Ya | Ya * | beta | klaim prefer_username harus dikonfigurasi melalui config |
Gitea | Ya | TIDAK | Ya | beta | |
Batu Kunci OpenStack | Ya | Ya | TIDAK | alfa |
Stabil, beta, dan alfa didefinisikan sebagai:
Semua perubahan atau penghentian fitur konektor akan diumumkan dalam catatan rilis.
Silakan lihat kebijakan keamanan kami untuk detail tentang pelaporan kerentanan.
Ketika semua pengkodean dan pengujian selesai, jalankan rangkaian pengujian:
make testall
Untuk pengalaman pengembang terbaik, instal Nix dan direnv.
Alternatifnya, instal Go dan Docker secara manual atau menggunakan manajer paket. Instal dependensi lainnya dengan menjalankan make deps
.
Untuk proses rilis, silakan baca dokumentasi rilis.
Proyek ini dilisensikan di bawah Lisensi Apache, Versi 2.0.