ฉันมีปัญหาในการเลือกกลยุทธ์การตรวจสอบสิทธิ์ที่เหมาะสม / ปลอดภัยสำหรับสถาปัตยกรรมไมโครเซอร์วิส โพสต์ SO เดียวที่ฉันพบในหัวข้อนี้คือSingle Sign-On ใน Microservice Architecture
ความคิดของฉันที่นี่คือการมีในแต่ละบริการ (เช่นการรับรองความถูกต้องการส่งข้อความการแจ้งเตือนโปรไฟล์ ฯลฯ ) การอ้างอิงที่ไม่ซ้ำกันสำหรับผู้ใช้แต่ละคน (ค่อนข้างมีเหตุผลแล้วของเขาuser_id
) และความเป็นไปได้ที่จะรับผู้ใช้ปัจจุบันid
หากเข้าสู่ระบบ
จากการวิจัยของฉันฉันเห็นว่ามีสองกลยุทธ์ที่เป็นไปได้:
1. สถาปัตยกรรมที่ใช้ร่วมกัน
ในกลยุทธ์นี้แอปตรวจสอบความถูกต้องเป็นหนึ่งในบริการอื่น ๆ แต่แต่ละบริการต้องสามารถทำการแปลงsession_id
=> ได้user_id
ดังนั้นจึงต้องตายง่ายๆ นั่นเป็นเหตุผลที่ฉันนึกถึง Redis ซึ่งจะเก็บคีย์: ค่าsession_id:user_id
ไว้
2. สถาปัตยกรรมไฟร์วอลล์
ในกลยุทธ์นี้การจัดเก็บเซสชันไม่ได้มีความสำคัญมากนักเนื่องจากได้รับการจัดการโดยแอปตรวจสอบสิทธิ์เท่านั้น จากนั้นuser_id
สามารถส่งต่อไปยังบริการอื่น ๆ ฉันนึกถึง Rails + Devise (+ Redis หรือ mem-cached หรือที่เก็บคุกกี้ ฯลฯ ) แต่มีความเป็นไปได้มากมาย สิ่งเดียวที่สำคัญคือ Service X ไม่จำเป็นต้องตรวจสอบสิทธิ์ผู้ใช้
วิธีการแก้ปัญหาทั้งสองนี้เปรียบเทียบกันอย่างไรในแง่ของ:
- ความปลอดภัย
- ความแข็งแกร่ง
- ความสามารถในการปรับขนาดได้
- สะดวกในการใช้
หรือคุณอาจจะแนะนำวิธีแก้ปัญหาอื่นที่ฉันไม่ได้กล่าวถึงที่นี่?
ฉันชอบโซลูชัน # 1 ที่ดีกว่า แต่ไม่พบการใช้งานเริ่มต้นมากนักที่จะทำให้ฉันปลอดภัยในความจริงที่ว่าฉันไปในทิศทางที่ถูกต้อง
ฉันหวังว่าคำถามของฉันจะไม่ถูกปิด ฉันไม่รู้จะถามมันที่ไหนดี
ขอบคุณล่วงหน้า