ลูกค้าผู้ถือ keycloak เท่านั้น: ทำไมถึงมีอยู่


10

ฉันพยายามคลุมหัวแนวคิดของbearer-onlyลูกค้าใน Keycloak

ฉันเข้าใจแนวคิดของความลับสาธารณะกับความลับและแนวคิดของบัญชีบริการและgrant_type=client_credentialsเนื้อหา แต่ด้วยbearer-onlyฉันติดอยู่

Googling เปิดเผยเฉพาะการอภิปรายที่พูดว่า

คุณไม่สามารถรับโทเค็นจาก keycloak กับbearer-onlyลูกค้า

เอกสารก็ไม่ชัดเจนเช่นกัน ทั้งหมดที่พวกเขาพูดคือ:

ประเภทการเข้าถึงเฉพาะผู้ถือหมายความว่าแอปพลิเคชันอนุญาตเฉพาะโทเค็นการร้องขอโทเค็น

ตกลงถ้าแอพของฉันอนุญาตเฉพาะโทเค็นผู้ถือฉันจะรับโทเค็นนี้ได้อย่างไรถ้าฉันไม่สามารถรับมันได้จาก Keycloak โดยใช้รหัสลูกค้า / ความลับของลูกค้า?

และถ้าคุณไม่ได้รับโทเค็นคุณจะทำอะไรได้บ้าง? ทำไมลูกค้าเหล่านี้จึงมีอยู่ ใครช่วยกรุณาให้ตัวอย่างของการใช้ลูกค้าประเภทนี้?

คำตอบ:


5

ในความเข้าใจของฉันจะใช้เมื่อคุณมีบริการภายใน สมมติว่าคุณมีและServiceA ServiceBเรียกใช้ซึ่งในการเรียกมือServiceA ไม่เคยถูกเรียกโดยผู้ใช้โดยตรงโดยบริการอื่นเท่านั้น จะได้รับโทเค็นโดยใช้ข้อมูลประจำตัวของผู้ใช้ และจากนั้นจะใช้โทเค็นนี้เพื่อเรียก จะไม่เริ่มต้นการเข้าสู่ระบบ มันจะใช้โทเค็นเพื่อตรวจสอบสิทธิ์ServiceBServiceBServiceAServiceBServiceB

ในกรณีนี้ ServiceA จะเป็นconfidentialและ ServiceB จะเป็นbearer-onlyลูกค้า


1
ดังนั้นนี่หมายความว่าหากลูกค้าของฉันเป็นผู้ถือเท่านั้นตัวเลือกเดียวที่ฉันมีให้คือการร้องขอการตรวจสอบกับ Keycloak เพื่อให้แน่ใจว่าโทเค็นServiceAนั้นถูกต้อง ขวา? แต่ถ้าเป็นกรณีนี้เหตุใดจึงเรียก Keycloak เลย หากลูกค้าของฉันมีกุญแจสาธารณะ Keycloak ก็สามารถตรวจสอบได้โดยใช้กุญแจนี้โดยไม่ต้องโทร Keycloak
kurtgn

เนื่องจากขอบเขตโทเค็น บริการ A ควรมีขอบเขตอื่นนอกเหนือจาก Service B ดังนั้นคุณต้องใช้ Keycload สำหรับการแลกเปลี่ยนโทเค็น
Julian Egner

@JulianEgner วิธีนี้มีเหตุผลยกเว้น Token Exchange อยู่ใน Tech Preview ไม่ได้รับการสนับสนุนอย่างสมบูรณ์และต้องเปิดใช้งานด้วย Env Variable อย่างชัดเจน มีbearer-onlyอยู่จริงแล้วที่จะให้การสนับสนุนกรณีใช้งานซึ่งยังไม่พร้อม?
irbull

@ irbull คุณได้รับข้อมูลที่การแลกเปลี่ยนโทเค็นจะอยู่ในหน้าตัวอย่างของเทคโนโลยีอย่างไร
Julian Egner

@JulianEgner มันถูกระบุไว้ที่ด้านล่างสุดของเอกสารของพวกเขา แสดงรายการในkeycloak.org/docs/latest/securing_apps/…มันบอกว่า "Token Exchange เป็นภาพตัวอย่างเทคโนโลยีและไม่ได้รับการสนับสนุนอย่างสมบูรณ์คุณลักษณะนี้ถูกปิดใช้งานโดยค่าเริ่มต้น"
irbull

5

ความหมายประเภทการเข้าถึงเฉพาะผู้ถือ

ประเภทการเข้าถึงเฉพาะผู้ถือหมายความว่าแอปพลิเคชันอนุญาตเฉพาะโทเค็นการร้องขอโทเค็น หากเปิดใช้งานแอปพลิเคชันนี้จะไม่สามารถเข้าร่วมในการเข้าสู่ระบบของเบราว์เซอร์ได้

ดังนั้นหากคุณเลือกลูกค้าของคุณbearer-onlyในกรณีนั้นอะแดปเตอร์ keycloak จะไม่พยายามตรวจสอบผู้ใช้ แต่เพียงตรวจสอบโทเค็นผู้ถือ นั่นเป็นสาเหตุว่าทำไมเอกสาร keycloak ที่กล่าวถึงbearer-onlyแอปพลิเคชันจะไม่อนุญาตให้ลงชื่อเข้าใช้จากเบราว์เซอร์

และถ้าคุณไม่ได้รับโทเค็นคุณจะทำอะไรได้บ้าง? ทำไมลูกค้าเหล่านี้จึงมีอยู่

ไม่สามารถตั้งค่าลูกค้าของคุณเป็นผู้ถือเท่านั้นบน Keycloak Server คุณยังสามารถใช้ผู้ถือเท่านั้นในการกำหนดค่าอะแดปเตอร์ Keycloak ไม่อนุญาตให้ลูกค้า "ผู้ถือเท่านั้น" (เมื่อตั้งค่าไคลเอนต์ของคุณบนเซิร์ฟเวอร์) เพื่อรับโทเค็นจากเซิร์ฟเวอร์ ลองเปลี่ยนไคลเอ็นต์ของคุณเป็น "secret" บนเซิร์ฟเวอร์และตั้งค่าผู้ถือเท่านั้นในการกำหนดค่าอะแดปเตอร์ของคุณ (keycloak.json)

ดังนั้นหากคุณเข้าใจข้อความข้างต้นแล้วถ้าคุณมีสองไมโครบริการที่พูดคุยกันในกรณีนี้ผู้โทรจะเป็นconfidentialและผู้เรียกจะเป็นbearer-only

และ Keycloak ยังกล่าวถึง

ผู้ถือไคลเอ็นต์เท่านั้นเป็นบริการบนเว็บที่ไม่เคยเข้าสู่ระบบโดยปกติจะใช้สำหรับการรักษาความปลอดภัยส่วนหลัง

ดังนั้นหากคุณต้องการใช้อะแดปเตอร์ใด ๆ คุณสามารถใช้bearer-onlyขึ้นอยู่กับความต้องการ


1
ขอบคุณ Subodh สำหรับคำอธิบายของคุณ! ดังนั้นนี่หมายความว่าหากลูกค้าของฉันเป็นผู้ถือเท่านั้นตัวเลือกเดียวที่ฉันมีให้คือการร้องขอการตรวจสอบกับ Keycloak เพื่อให้แน่ใจว่าโทเค็นนั้นถูกต้อง ขวา? แต่ถ้าเป็นกรณีนี้เหตุใดจึงเรียก Keycloak เลย หากลูกค้าของฉันมีกุญแจสาธารณะ Keycloak ก็สามารถตรวจสอบได้โดยใช้กุญแจนี้โดยไม่ต้องโทร Keycloak
kurtgn

@kurtgn หากคุณกำลังใช้อะแดปเตอร์ใด ๆ แล้วฉันจะแนะนำให้ใช้bearer-onlyอย่างอื่นทำให้ลูกค้าของคุณconfidential
Subodh Joshi

ไม่ฉันไม่ได้ใช้อะแดปเตอร์ฉันกำลังเขียนโปรแกรมใน Python ไม่มีอะแดปเตอร์เฉพาะของไพ ธ อนสำหรับ Keycloak ดังนั้นฉันต้องใช้ OIDC libs ทั่วไป #
4327

ไลบรารีใดที่คุณใช้กับ Keycloak + Python Integration
Subodh Joshi


0

คำตอบสั้น ๆ : คุณไม่สามารถรับโทเค็นการเข้าถึงโดยใช้ไคลเอ็นต์แบบผู้ใช้เท่านั้น แต่คุณสามารถรับโทเค็นการเข้าถึงแบบไคลเอ็นต์แบบผู้ใช้เท่านั้นที่สามารถยอมรับได้โดยใช้ไคลเอ็นต์อื่น

รายละเอียดเพิ่มเติมลูกค้าที่รับเฉพาะผู้ใช้ที่เป็นประโยชน์แสดงถึงแอปพลิเคชันแบ็คเอนด์เช่นบริการเว็บที่เรียกใช้โดยแอปพลิเคชันด้านหน้าและปลอดภัยโดยเซิร์ฟเวอร์การอนุญาต (= keycloak)

แอปพลิเคชันบริการแบ็กเอนด์ / เว็บไม่ได้ถูกเรียกโดยผู้ใช้โดยตรงดังนั้นจึงไม่สามารถเล่นในโฟลว์อินเทอร์แอคทีฟของผู้ใช้ Oauth2.0 ได้ การตั้งค่าเอกสาร "ผู้ถือเท่านั้น" ทำให้ข้อเท็จจริงนี้เป็นเซิร์ฟเวอร์ keycloak ช่วยให้ผู้ดูแลระบบสามารถกำหนดค่าไคลเอ็นต์โดยไม่มีค่าบังคับอื่น ๆ (ตัวอย่างการเปลี่ยนเส้นทาง uri ... ) และอนุญาตให้ใช้ข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์หากมีคนพยายามขอรับโทเค็นสำหรับไคลเอ็นต์ดังกล่าว

อย่างไรก็ตามนี่ไม่ได้หมายความว่าคุณไม่สามารถกำหนดค่าบทบาทเฉพาะสำหรับไคลเอนต์นี้ได้ดังนั้นจึงจำเป็นต้องปรากฏใน keycloak realm

นอกจากนี้ไคลเอ็นต์แบบผู้ใช้เท่านั้นที่ต้องตรวจสอบโทเค็นการเข้าถึงที่ได้รับโดยเฉพาะอย่างยิ่งหากคุณลักษณะอะแดปเตอร์ (แนะนำ) "การตรวจสอบโทเค็นผู้ชม" ถูกเปิดใช้งานไคลเอนต์เฉพาะผู้ถือเท่านั้นที่ต้องตรวจสอบว่า ลูกค้าผู้ถือเท่านั้นต้องอยู่ในแอตทริบิวต์ผู้ชมของโทเค็นการเข้าถึง: ดูที่https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

สำหรับผู้ชมที่จัดการโดย keycloak ลูกค้าที่เป็นผู้ถือเท่านั้นจะต้องลงทะเบียนใน realcloak realm

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.