Dex เป็นบริการระบุตัวตนที่ใช้ OpenID Connect เพื่อขับเคลื่อนการตรวจสอบสิทธิ์สำหรับแอปอื่นๆ
Dex ทำหน้าที่เป็นพอร์ทัลไปยังผู้ให้บริการข้อมูลประจำตัวรายอื่นผ่าน "ตัวเชื่อมต่อ" ซึ่งช่วยให้ dex เลื่อนการตรวจสอบสิทธิ์ไปยังเซิร์ฟเวอร์ LDAP, ผู้ให้บริการ SAML หรือผู้ให้บริการข้อมูลประจำตัวที่จัดตั้งขึ้น เช่น GitHub, Google และ Active Directory ลูกค้าเขียนตรรกะการตรวจสอบสิทธิ์ของตนเองหนึ่งครั้งเพื่อพูดคุยกับ dex จากนั้น dex จะจัดการโปรโตคอลสำหรับแบ็กเอนด์ที่กำหนด
ID Tokens เป็นส่วนขยาย OAuth2 ที่นำเสนอโดย OpenID Connect และคุณสมบัติหลักของ dex โทเค็น ID คือ JSON Web Tokens (JWT) ที่ลงนามโดย dex และส่งคืนโดยเป็นส่วนหนึ่งของการตอบสนอง 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 และมีการอ้างสิทธิ์ตามมาตรฐานที่บริการอื่นๆ สามารถใช้เป็นข้อมูลประจำตัวแบบบริการต่อบริการได้ ระบบที่สามารถใช้ OpenID Connect ID Tokens ที่ออกโดย dex ได้แล้ว ได้แก่:
สำหรับรายละเอียดเกี่ยวกับวิธีขอหรือตรวจสอบ ID Token โปรดดู "การเขียนแอปที่ใช้ dex"
Dex ทำงานบนคลัสเตอร์ Kubernetes ใดๆ โดยใช้ Custom Resource Definitions และสามารถขับเคลื่อนการตรวจสอบสิทธิ์เซิร์ฟเวอร์ API ผ่านปลั๊กอิน OpenID Connect ไคลเอ็นต์ เช่น kubernetes-dashboard
และ kubectl
สามารถดำเนินการในนามของผู้ใช้ที่สามารถเข้าสู่ระบบคลัสเตอร์ผ่านการสนับสนุน dex ของผู้ให้บริการข้อมูลระบุตัวตน
เมื่อผู้ใช้เข้าสู่ระบบผ่าน dex โดยปกติแล้วข้อมูลประจำตัวของผู้ใช้จะถูกจัดเก็บไว้ในระบบการจัดการผู้ใช้อื่น เช่น ไดเรกทอรี LDAP, องค์กร GitHub ฯลฯ Dex ทำหน้าที่เป็นตัวแบ่งระหว่างแอปไคลเอนต์และผู้ให้บริการข้อมูลประจำตัวอัปสตรีม ลูกค้าเพียงต้องเข้าใจ OpenID Connect เพื่อสืบค้น dex ในขณะที่ dex ใช้อาร์เรย์ของโปรโตคอลสำหรับการสืบค้นระบบการจัดการผู้ใช้อื่น ๆ
"ตัวเชื่อมต่อ" คือกลยุทธ์ที่ใช้โดย dex ในการตรวจสอบผู้ใช้กับผู้ให้บริการข้อมูลประจำตัวรายอื่น Dex ใช้ตัวเชื่อมต่อที่กำหนดเป้าหมายแพลตฟอร์มเฉพาะ เช่น GitHub, LinkedIn และ Microsoft รวมถึงโปรโตคอลที่สร้างขึ้น เช่น LDAP และ SAML
ขึ้นอยู่กับข้อจำกัดของตัวเชื่อมต่อในโปรโตคอลสามารถป้องกันไม่ให้ dex ออกโทเค็นการรีเฟรชหรือส่งคืนการอ้างสิทธิ์การเป็นสมาชิกกลุ่ม ตัวอย่างเช่น เนื่องจาก SAML ไม่มีวิธีที่ไม่โต้ตอบในการรีเฟรชการยืนยัน หากผู้ใช้เข้าสู่ระบบผ่าน dex ตัวเชื่อมต่อ SAML จะไม่ออกโทเค็นการรีเฟรชไปยังไคลเอ็นต์ จำเป็นต้องมีการสนับสนุนโทเค็นการรีเฟรชสำหรับไคลเอ็นต์ที่ต้องการการเข้าถึงแบบออฟไลน์ เช่น kubectl
Dex ใช้ตัวเชื่อมต่อต่อไปนี้:
ชื่อ | รองรับโทเค็นการรีเฟรช | รองรับการเรียกร้องของกลุ่ม | รองรับการอ้างสิทธิ์ที่ต้องการ _ชื่อผู้ใช้ | สถานะ | บันทึกย่อ |
---|---|---|---|---|---|
แอลดีเอพี | ใช่ | ใช่ | ใช่ | มั่นคง | |
GitHub | ใช่ | ใช่ | ใช่ | มั่นคง | |
SAML2.0 | เลขที่ | ใช่ | เลขที่ | มั่นคง | คำเตือน: ไม่ได้รับการบำรุงรักษาและมีแนวโน้มที่จะเสี่ยงต่อการข้ามการรับรองความถูกต้อง (#1884) |
GitLab | ใช่ | ใช่ | ใช่ | เบต้า | |
เชื่อมต่อ OpenID | ใช่ | ใช่ | ใช่ | เบต้า | รวมถึง Salesforce, Azure และอื่นๆ |
OAuth 2.0 | เลขที่ | ใช่ | ใช่ | อัลฟ่า | |
ใช่ | ใช่ | ใช่ | อัลฟ่า | ||
ลิงค์อิน | ใช่ | เลขที่ | เลขที่ | เบต้า | |
ไมโครซอฟต์ | ใช่ | ใช่ | เลขที่ | เบต้า | |
AuthProxy | เลขที่ | ใช่ | เลขที่ | อัลฟ่า | พร็อกซีการตรวจสอบสิทธิ์ เช่น Apache2 mod_auth เป็นต้น |
บิทบัคเก็ต คลาวด์ | ใช่ | ใช่ | เลขที่ | อัลฟ่า | |
โอเพ่นชิฟท์ | ใช่ | ใช่ | เลขที่ | อัลฟ่า | |
ฝูงชน Atlassian | ใช่ | ใช่ | ใช่ * | เบต้า | การอ้างสิทธิ์ที่ต้องการ_ชื่อผู้ใช้ต้องได้รับการกำหนดค่าผ่านการกำหนดค่า |
กีเทีย | ใช่ | เลขที่ | ใช่ | เบต้า | |
OpenStack คีย์สโตน | ใช่ | ใช่ | เลขที่ | อัลฟ่า |
เสถียร เบต้า และอัลฟ่าถูกกำหนดเป็น:
การเปลี่ยนแปลงหรือการเลิกใช้งานฟีเจอร์ตัวเชื่อมต่อทั้งหมดจะมีการประกาศในบันทึกประจำรุ่น
โปรดดูนโยบายความปลอดภัยของเราสำหรับรายละเอียดเกี่ยวกับการรายงานช่องโหว่
เมื่อการเข้ารหัสและการทดสอบทั้งหมดเสร็จสิ้น โปรดเรียกใช้ชุดการทดสอบ:
make testall
เพื่อประสบการณ์นักพัฒนาที่ดีที่สุด ให้ติดตั้ง Nix และ direnv
หรือติดตั้ง Go และ Docker ด้วยตนเองหรือใช้ตัวจัดการแพ็คเกจ ติดตั้งการอ้างอิงที่เหลือโดยการรัน make deps
สำหรับขั้นตอนการเผยแพร่ โปรดอ่านเอกสารการเผยแพร่
โครงการนี้ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0