SSO บนสถาปัตยกรรมไมโครเซอร์วิส เราใช้คีย์โคลก ส่วนที่ 1

ในบริษัทขนาดใหญ่ใดๆ และ X5 Retail Group ก็ไม่มีข้อยกเว้น เนื่องจากมีการพัฒนา จำนวนโครงการที่ต้องมีการอนุญาตจากผู้ใช้จึงเพิ่มขึ้น เมื่อเวลาผ่านไป จำเป็นต้องมีการเปลี่ยนผู้ใช้จากแอปพลิเคชันหนึ่งไปยังอีกแอปพลิเคชันหนึ่งอย่างราบรื่น จากนั้นจึงจำเป็นต้องใช้เซิร์ฟเวอร์ Single-Sing-On (SSO) เดียว แต่จะเกิดอะไรขึ้นเมื่อผู้ให้บริการข้อมูลประจำตัว เช่น AD หรืออื่นๆ ที่ไม่มีแอตทริบิวต์เพิ่มเติมถูกใช้ในโครงการต่างๆ แล้ว ระบบที่เรียกว่า "นายหน้าระบุตัวตน" จะมาช่วย ฟังก์ชั่นที่ใช้งานได้มากที่สุดคือตัวแทนของมัน เช่น Keycloak, Gravitee Access Management เป็นต้น ส่วนใหญ่กรณีการใช้งานอาจแตกต่างกัน: การโต้ตอบกับเครื่อง การมีส่วนร่วมของผู้ใช้ ฯลฯ โซลูชันต้องรองรับฟังก์ชันที่ยืดหยุ่นและปรับขนาดได้ซึ่งสามารถรวมความต้องการทั้งหมดไว้ในที่เดียว และโซลูชันดังกล่าว ขณะนี้บริษัทของเรามีโบรกเกอร์บ่งชี้ - Keycloak

SSO บนสถาปัตยกรรมไมโครเซอร์วิส เราใช้คีย์โคลก ส่วนที่ 1

Keycloak เป็นผลิตภัณฑ์ระบุตัวตนแบบโอเพ่นซอร์สและการควบคุมการเข้าถึงที่ดูแลโดย RedHat เป็นพื้นฐานสำหรับผลิตภัณฑ์ของบริษัทโดยใช้ SSO - RH-SSO

แนวคิดพื้นฐาน

ก่อนที่คุณจะเริ่มจัดการกับวิธีแก้ปัญหาและแนวทางต่างๆ คุณควรตัดสินใจในแง่ของเงื่อนไขและลำดับของกระบวนการ:

SSO บนสถาปัตยกรรมไมโครเซอร์วิส เราใช้คีย์โคลก ส่วนที่ 1

บัตรประจำตัว เป็นขั้นตอนสำหรับการจดจำหัวเรื่องด้วยตัวระบุ (อีกนัยหนึ่ง นี่คือคำจำกัดความของชื่อ ล็อกอิน หรือหมายเลข)

การรับรอง - นี่คือขั้นตอนการตรวจสอบสิทธิ์ (ผู้ใช้ถูกตรวจสอบด้วยรหัสผ่าน จดหมายถูกตรวจสอบด้วยลายเซ็นอิเล็กทรอนิกส์ ฯลฯ)

การอนุญาต - นี่คือข้อกำหนดในการเข้าถึงทรัพยากร (เช่น อีเมล)

รหัสประจำตัวนายหน้า

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

Keycloak นำเสนอคุณสมบัติต่างๆ เช่น การลงชื่อเพียงครั้งเดียว (SSO), ข้อมูลประจำตัวผ่านนายหน้าและการเข้าสู่ระบบโซเชียล, สหพันธ์ผู้ใช้, อะแดปเตอร์ไคลเอ็นต์, คอนโซลผู้ดูแลระบบ และคอนโซลการจัดการบัญชี

ฟังก์ชันพื้นฐานที่สนับสนุนโดย Keycloak:

  • การลงชื่อเพียงครั้งเดียวและลงชื่อออกเพียงครั้งเดียวสำหรับแอปพลิเคชันเบราว์เซอร์
  • รองรับ OpenID/OAuth 2.0/SAML
  • Identity Brokering - การรับรองความถูกต้องโดยใช้ OpenID Connect ภายนอกหรือผู้ให้บริการข้อมูลประจำตัว SAML
  • การเข้าสู่ระบบโซเชียล - Google, GitHub, Facebook, Twitter รองรับการระบุตัวตนของผู้ใช้
  • User Federation - การซิงโครไนซ์ผู้ใช้จากเซิร์ฟเวอร์ LDAP และ Active Directory และผู้ให้บริการข้อมูลประจำตัวอื่นๆ
  • สะพาน Kerberos - ใช้เซิร์ฟเวอร์ Kerberos สำหรับการตรวจสอบผู้ใช้โดยอัตโนมัติ
  • คอนโซลผู้ดูแลระบบ - สำหรับการจัดการแบบรวมศูนย์ของการตั้งค่าและตัวเลือกโซลูชันผ่านทางเว็บ
  • คอนโซลการจัดการบัญชี - สำหรับการจัดการโปรไฟล์ผู้ใช้ด้วยตนเอง
  • การปรับแต่งโซลูชันตามเอกลักษณ์องค์กรของบริษัท
  • การรับรองความถูกต้อง 2FA - รองรับ TOTP/HOTP โดยใช้ Google Authenticator หรือ FreeOTP
  • ขั้นตอนการเข้าสู่ระบบ - ผู้ใช้ลงทะเบียนด้วยตนเอง กู้คืนและรีเซ็ตรหัสผ่าน และอื่นๆ ได้
  • การจัดการเซสชัน - ผู้ดูแลระบบสามารถจัดการเซสชันของผู้ใช้ได้จากจุดเดียว
  • Token Mappers - เชื่อมโยงแอ็ตทริบิวต์ของผู้ใช้ บทบาท และแอ็ตทริบิวต์ที่จำเป็นอื่นๆ กับโทเค็น
  • การจัดการนโยบายที่ยืดหยุ่นทั่วทั้งขอบเขต แอปพลิเคชัน และผู้ใช้
  • การสนับสนุน CORS - ไคลเอนต์อะแด็ปเตอร์มีการสนับสนุน CORS ในตัว
  • Service Provider Interfaces (SPI) - SPI จำนวนมากที่ให้คุณปรับแต่งลักษณะต่างๆ ของเซิร์ฟเวอร์: ขั้นตอนการตรวจสอบสิทธิ์ ผู้ให้บริการข้อมูลประจำตัว การแมปโปรโตคอล และอื่นๆ
  • ไคลเอนต์อะแด็ปเตอร์สำหรับแอปพลิเคชัน JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring
  • รองรับการทำงานกับแอพพลิเคชั่นต่างๆ ที่รองรับ OpenID Connect Relying Party library หรือ SAML 2.0 Service Provider Library
  • ขยายได้โดยใช้ปลั๊กอิน

สำหรับกระบวนการ CI / CD รวมถึงระบบอัตโนมัติของกระบวนการจัดการใน Keycloak สามารถใช้ REST API / JAVA API ได้ เอกสารมีให้ทางอิเล็กทรอนิกส์:

REST API https://www.keycloak.org/docs-api/8.0/rest-api/index.html
จาวา เอพีไอ https://www.keycloak.org/docs-api/8.0/javadocs/index.html

ผู้ให้บริการข้อมูลประจำตัวองค์กร (ในองค์กร)

ความสามารถในการตรวจสอบผู้ใช้ผ่านบริการ User Federation

SSO บนสถาปัตยกรรมไมโครเซอร์วิส เราใช้คีย์โคลก ส่วนที่ 1

นอกจากนี้ยังสามารถใช้การรับรองความถูกต้องแบบพาสทรูได้ หากผู้ใช้ตรวจสอบสิทธิ์บนเวิร์กสเตชันด้วย Kerberos (LDAP หรือ AD) ผู้ใช้จะได้รับการรับรองความถูกต้องโดยอัตโนมัติกับ Keycloak โดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านอีกครั้ง

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

รายการ DBMS ที่รองรับมีมากมายและรวมถึง: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle และอื่นๆ ที่ผ่านการทดสอบมากที่สุดคือ Oracle 12C Release1 RAC และคลัสเตอร์ Galera 3.12 สำหรับ MariaDB 10.1.19

ผู้ให้บริการข้อมูลประจำตัว - เข้าสู่ระบบโซเชียล

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

SSO บนสถาปัตยกรรมไมโครเซอร์วิส เราใช้คีย์โคลก ส่วนที่ 1

คุณสามารถใช้ผู้ให้บริการ OpenID/SAML Identity สำหรับการตรวจสอบผู้ใช้

สถานการณ์การให้สิทธิ์โดยทั่วไปโดยใช้ OAuth2 ใน Keycloak

ขั้นตอนรหัสการให้สิทธิ์ - ใช้กับแอปพลิเคชันฝั่งเซิร์ฟเวอร์ ประเภทของสิทธิ์การอนุญาตที่พบได้บ่อยที่สุดประเภทหนึ่ง เนื่องจากเหมาะสำหรับแอปพลิเคชันเซิร์ฟเวอร์ที่ซอร์สโค้ดของแอปพลิเคชันและข้อมูลไคลเอ็นต์ไม่พร้อมใช้งานสำหรับบุคคลภายนอก กระบวนการในกรณีนี้ขึ้นอยู่กับการเปลี่ยนเส้นทาง แอปพลิเคชันต้องสามารถสื่อสารกับตัวแทนผู้ใช้ (user-agent) เช่น เว็บเบราว์เซอร์ - เพื่อรับรหัสอนุญาต API ที่เปลี่ยนเส้นทางผ่านตัวแทนผู้ใช้

การไหลโดยปริยาย - ใช้โดยแอปพลิเคชันมือถือหรือเว็บ (แอปพลิเคชันที่ทำงานบนอุปกรณ์ของผู้ใช้)

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

Implicit Flow ไม่รองรับโทเค็นการรีเฟรชโทเค็นการเข้าถึง

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

ข้อกำหนด OAuth2 อธิบายไว้ใน
อาร์เอฟซี-6749
อาร์เอฟซี-8252
อาร์เอฟซี-6819

โทเค็น JWT และประโยชน์ของมัน

JWT (JSON Web Token) เป็นมาตรฐานเปิด (https://tools.ietf.org/html/rfc7519) ที่กำหนดวิธีที่กะทัดรัดและมีทุกอย่างในตัวเองเพื่อถ่ายโอนข้อมูลอย่างปลอดภัยระหว่างฝ่ายต่างๆ เป็นอ็อบเจ็กต์ JSON

ตามมาตรฐาน โทเค็นประกอบด้วยสามส่วนในรูปแบบฐาน 64 คั่นด้วยจุด ส่วนแรกเรียกว่าส่วนหัว ซึ่งมีประเภทของโทเค็นและชื่อของอัลกอริทึมแฮชสำหรับการรับลายเซ็นดิจิทัล ส่วนที่สองเก็บข้อมูลพื้นฐาน (ผู้ใช้ คุณลักษณะ ฯลฯ) ส่วนที่สามคือลายเซ็นดิจิทัล

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

รีเฟรชโทเค็น เป็นโทเค็นที่อนุญาตให้ลูกค้าขอโทเค็นการเข้าถึงใหม่หลังจากอายุการใช้งานหมดอายุ โทเค็นเหล่านี้มักจะออกเป็นระยะเวลานาน

ข้อได้เปรียบหลักของการใช้งานในสถาปัตยกรรมไมโครเซอร์วิส:

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

โทเค็น JWT - องค์ประกอบ

ชื่อเรื่อง - ตามค่าเริ่มต้น ส่วนหัวจะมีเฉพาะประเภทของโทเค็นและอัลกอริทึมที่ใช้สำหรับการเข้ารหัส

ประเภทของโทเค็นจะถูกเก็บไว้ในปุ่ม "typ" คีย์ 'type' ถูกละเว้นใน JWT หากมีคีย์ "typ" ค่าต้องเป็น JWT เพื่อระบุว่าอ็อบเจ็กต์นี้เป็น JSON Web Token

คีย์ที่สอง "alg" กำหนดอัลกอริทึมที่ใช้ในการเข้ารหัสโทเค็น ควรตั้งค่าเป็น HS256 โดยค่าเริ่มต้น ส่วนหัวถูกเข้ารหัสใน base64

{ "alg": "HS256", "ประเภท": "JWT"}
เพย์โหลด (เนื้อหา) - payload เก็บข้อมูลใด ๆ ที่จำเป็นต้องตรวจสอบ แต่ละคีย์ในเพย์โหลดเรียกว่า "การอ้างสิทธิ์" ตัวอย่างเช่น คุณสามารถเข้าสู่แอปพลิเคชันได้โดยการเชิญเท่านั้น (ปิดโปรโมชัน) เมื่อเราต้องการเชิญใครสักคนให้เข้าร่วม เราจะส่งจดหมายเชิญไปให้ สิ่งสำคัญคือต้องตรวจสอบว่าที่อยู่อีเมลเป็นของบุคคลที่ตอบรับคำเชิญ ดังนั้นเราจะรวมที่อยู่นี้ไว้ในเพย์โหลด สำหรับสิ่งนี้เราจะจัดเก็บไว้ในคีย์ "อีเมล"

{ "อีเมล": "[ป้องกันอีเมล]"}

คีย์ในเพย์โหลดสามารถกำหนดได้ตามอำเภอใจ อย่างไรก็ตาม มีข้อสงวนบางประการ:

  • iss (ผู้ออก) - ระบุแอปพลิเคชันที่ส่งโทเค็น
  • ย่อย (หัวเรื่อง) - กำหนดหัวเรื่องของโทเค็น
  • aud (ผู้ชม) เป็นอาร์เรย์ของสตริงหรือ URI ที่คำนึงถึงตัวพิมพ์เล็กและใหญ่ซึ่งเป็นรายการของผู้รับของโทเค็นนี้ เมื่อฝั่งรับได้รับ JWT ด้วยคีย์ที่กำหนด ฝั่งนั้นจะต้องตรวจสอบการมีอยู่ของตัวเองในฝั่งผู้รับ - มิฉะนั้นไม่ต้องสนใจโทเค็น
  • exp (เวลาหมดอายุ) - ระบุเมื่อโทเค็นหมดอายุ มาตรฐาน JWT กำหนดให้มีการใช้งานทั้งหมดเพื่อปฏิเสธโทเค็นที่หมดอายุ คีย์ exp ต้องเป็นการประทับเวลาในรูปแบบยูนิกซ์
  • nbf (Not Before) คือเวลาในรูปแบบยูนิกซ์ที่กำหนดช่วงเวลาที่โทเค็นถูกต้อง
  • iat (ออกเมื่อ) - คีย์นี้แสดงถึงเวลาที่ออกโทเค็นและสามารถใช้เพื่อกำหนดอายุของ JWT คีย์ iat ต้องเป็นการประทับเวลาในรูปแบบยูนิกซ์
  • Jti (JWT ID) — สตริงที่กำหนดตัวระบุเฉพาะของโทเค็นนี้ โดยคำนึงถึงตัวพิมพ์เล็กและใหญ่

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

เข้ารหัส Base64: นำส่วนหัวและเพย์โหลดมารวมกันเป็นสตริงผ่านจุด จากนั้นสตริงนี้และคีย์ลับจะถูกป้อนเข้าสู่อัลกอริทึมการเข้ารหัสที่ระบุในส่วนหัว (คีย์ "alg") คีย์สามารถเป็นสตริงใดก็ได้ สตริงที่ยาวจะเป็นที่ต้องการมากที่สุดเนื่องจากจะใช้เวลานานกว่าในการรับ

{"alg":"RSA1_5","payload":"A128CBC-HS256"}

การสร้างสถาปัตยกรรมคลัสเตอร์ Keycloak Failover

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

การเพิ่มความเสี่ยงของความล้มเหลวของ SSO เดียวจะเพิ่มข้อกำหนดสำหรับสถาปัตยกรรมโซลูชันและวิธีการที่ใช้สำหรับส่วนประกอบที่ซ้ำซ้อน และนำไปสู่ ​​SLA ที่เข้มงวดมาก ในเรื่องนี้ บ่อยครั้งในระหว่างการพัฒนาหรือช่วงเริ่มต้นของการนำโซลูชันไปใช้ โครงการต่างๆ จะมีโครงสร้างพื้นฐานที่ไม่ทนต่อข้อผิดพลาดของตนเอง เมื่อการพัฒนาดำเนินไป จำเป็นต้องวางโอกาสในการพัฒนาและปรับขนาด การสร้างคลัสเตอร์เฟลโอเวอร์มีความยืดหยุ่นมากที่สุดโดยใช้การจำลองเสมือนของคอนเทนเนอร์หรือวิธีการแบบผสมผสาน

ในการทำงานในโหมดคลัสเตอร์ Active/Active และ Active/Passive จำเป็นต้องตรวจสอบความสอดคล้องของข้อมูลในฐานข้อมูลเชิงสัมพันธ์ - โหนดฐานข้อมูลทั้งสองจะต้องจำลองแบบพร้อมกันระหว่างศูนย์ข้อมูลที่กระจายตามพื้นที่ต่างๆ

ตัวอย่างที่ง่ายที่สุดของการติดตั้งที่ทนต่อความผิดพลาด

SSO บนสถาปัตยกรรมไมโครเซอร์วิส เราใช้คีย์โคลก ส่วนที่ 1

ประโยชน์ของการใช้คลัสเตอร์เดียวคืออะไร:

  • ความพร้อมใช้งานและประสิทธิภาพสูง
  • รองรับโหมดการทำงาน: Active / Active, Active / Passive
  • ความสามารถในการปรับขนาดแบบไดนามิก - เมื่อใช้การจำลองเสมือนของคอนเทนเนอร์
  • ความเป็นไปได้ของการจัดการและการตรวจสอบแบบรวมศูนย์
  • วิธีการแบบครบวงจรสำหรับการระบุตัวตน/การรับรองความถูกต้อง/การให้สิทธิ์ผู้ใช้ในโครงการ
  • การโต้ตอบที่โปร่งใสมากขึ้นระหว่างโครงการต่างๆ โดยที่ผู้ใช้ไม่ต้องเกี่ยวข้อง
  • ความสามารถในการใช้โทเค็น JWT ซ้ำในโครงการต่างๆ
  • จุดเดียวของความไว้วางใจ
  • เปิดตัวโครงการได้เร็วขึ้นโดยใช้ microservices/container virtualization (ไม่จำเป็นต้องยกและกำหนดค่าส่วนประกอบเพิ่มเติม)
  • เป็นไปได้ที่จะซื้อการสนับสนุนเชิงพาณิชย์จากผู้ขาย

สิ่งที่ต้องมองหาเมื่อวางแผนคลัสเตอร์

DBMS

Keycloak ใช้ระบบจัดการฐานข้อมูลเพื่อจัดเก็บ: ขอบเขต ลูกค้า ผู้ใช้ ฯลฯ
รองรับ DBMS ที่หลากหลาย: MS SQL, Oracle, MySQL, PostgreSQL Keycloak มาพร้อมกับฐานข้อมูลเชิงสัมพันธ์ในตัวของมันเอง ขอแนะนำให้ใช้สำหรับสภาพแวดล้อมที่ไม่ได้โหลด - เช่นสภาพแวดล้อมการพัฒนา

ในการทำงานในโหมดคลัสเตอร์ Active/Active และ Active/Passive จำเป็นต้องมีความสอดคล้องของข้อมูลในฐานข้อมูลเชิงสัมพันธ์ และโหนดคลัสเตอร์ฐานข้อมูลทั้งสองจะถูกจำลองแบบพร้อมกันระหว่างศูนย์ข้อมูล

แคชแบบกระจาย (Infinspan)

เพื่อให้คลัสเตอร์ทำงานได้อย่างถูกต้อง จำเป็นต้องมีการซิงโครไนซ์เพิ่มเติมของแคชประเภทต่อไปนี้โดยใช้ JBoss Data Grid:

เซสชันการรับรองความถูกต้อง - ใช้เพื่อบันทึกข้อมูลเมื่อตรวจสอบผู้ใช้เฉพาะราย คำขอจากแคชนี้มักจะรวมเฉพาะเบราว์เซอร์และเซิร์ฟเวอร์ Keycloak ไม่ใช่แอปพลิเคชัน

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

การแคชและการทำให้ข้อมูลถาวรไม่ถูกต้อง - ใช้เพื่อแคชข้อมูลถาวรเพื่อหลีกเลี่ยงการสืบค้นที่ไม่จำเป็นไปยังฐานข้อมูล เมื่อเซิร์ฟเวอร์ Keycloak ใด ๆ อัปเดตข้อมูล เซิร์ฟเวอร์ Keycloak อื่น ๆ ทั้งหมดในศูนย์ข้อมูลทั้งหมดจำเป็นต้องทราบเกี่ยวกับข้อมูลดังกล่าว

งาน - ใช้เพื่อส่งข้อความที่ไม่ถูกต้องระหว่างโหนดคลัสเตอร์และศูนย์ข้อมูลเท่านั้น

เซสชันผู้ใช้ - ใช้เพื่อเก็บข้อมูลเกี่ยวกับเซสชันผู้ใช้ที่ถูกต้องตามระยะเวลาเซสชันเบราว์เซอร์ของผู้ใช้ แคชต้องประมวลผลคำขอ HTTP จากผู้ใช้ปลายทางและแอปพลิเคชัน

การป้องกันการบังคับเดรัจฉาน - ใช้เพื่อติดตามข้อมูลเกี่ยวกับการเข้าสู่ระบบที่ล้มเหลว

โหลดบาลานซ์

โหลดบาลานเซอร์เป็นจุดเริ่มต้นเดียวสำหรับคีย์โคลก และต้องรองรับเซสชันที่เหนียว

เซิร์ฟเวอร์แอปพลิเคชัน

ใช้เพื่อควบคุมการโต้ตอบของส่วนประกอบต่างๆ ซึ่งกันและกัน และสามารถจำลองเสมือนหรือคอนเทนเนอร์โดยใช้เครื่องมือการทำงานอัตโนมัติที่มีอยู่และการปรับขนาดไดนามิกของเครื่องมือการทำงานอัตโนมัติของโครงสร้างพื้นฐาน สถานการณ์การปรับใช้ที่พบบ่อยที่สุดใน OpenShift, Kubernates, Rancher

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

ที่มา: will.com

เพิ่มความคิดเห็น