วิธีโยกย้าย webapp ดั้งเดิมที่มีอยู่เพื่อใช้ OAuth2


10

ขณะนี้ฉันมีเว็บแอพพลิเคชั่นเสาหินอายุ 15 ปีที่มีผู้ใช้งานเกือบ 1 ล้านคนโดยใช้ระบบการอนุญาตและรับรองความถูกต้อง: JAAS ชื่อผู้ใช้ & ร้านค้า pwds ในฐานข้อมูลด้วยการแฮชรหัสผ่านขั้นพื้นฐาน อัลกอริทึมคร่ำเครียด ฯลฯ )

ฉันจะปรับปรุงแอปพลิเคชั่นในช่วง 12-18 เดือนข้างหน้าโดยเน้นที่ UI เป็นหลัก แต่จะค่อยๆอัพเกรดชิ้นส่วนพื้นฐานเช่นกัน (อัพเกรดเป็น Spring, Spring Security, เป็นต้น) ภายในโครงการนี้เราได้ตัดสินใจที่จะแก้ไขปัญหาการอัพเกรด UI แบบโมดูลต่อโมดูล ทำให้แต่ละโมดูลพร้อมใช้งานเมื่อเสร็จสมบูรณ์ โอกาสที่สมบูรณ์แบบในการแบ่งเสาหินออกเป็นเว็บแอปแต่ละอัน (ทั้งหมดยังคงการออกแบบ UX ที่เหมือนกัน)

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

ฉันกำลังพยายามเข้าใจวิธีรวมสิ่งนี้ ฉันต้องสร้างเซิร์ฟเวอร์ OAuth2 ที่กำหนดเองของตัวเองหรือไม่ นั่นทำให้ฉันชอบความคิดที่แย่มาก แต่ฉันจะ:

  1. โอนย้ายบัญชีผู้ใช้และกระบวนการอนุญาตทั้งหมดไปยังเซิร์ฟเวอร์ OAuth2 ของบุคคลที่สาม
  2. ปรับแต่งรูปลักษณ์และความรู้สึกเพื่อให้ตรงกับส่วนที่เหลือของแอปพลิเคชันของฉัน (ไม่แน่ใจว่าจะเป็นได้อย่างง่ายดาย / น่าจะเป็น)
  3. ป้องกันไม่ให้ป๊อปอัป "แอปพลิเคชัน XYZ ต้องการสิทธิ์ในการเข้าถึงบัญชีของคุณ ... " เมื่อเชื่อมต่อผ่านเซิร์ฟเวอร์บุคคลที่สาม (เช่น: Google OpenID, Facebook และอื่น ๆ )

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


ฉันสงสัยว่า SSO จะเพียงพอหรือไม่ OAuth ไม่ดูเหมือนระบบที่คุณต้องการสำหรับฉัน ดูCAS
Laiv

คำตอบ:


2

การเปิดเผยข้อมูล : ผมเป็นวิศวกรที่Auth0

มันขึ้นอยู่กับประเด็นสำคัญข้อหนึ่ง ... คุณต้องตัดสินใจว่า:

  1. คุณต้องการใช้เวลาจำนวนมากโดยตรง (และใช้เงินทางอ้อม) ในการสร้างและ / หรือดูแลผู้ให้บริการเอกลักษณ์และเซิร์ฟเวอร์การอนุญาตของคุณเอง
  2. หรือคุณต้องการจ่ายเงินโดยตรงและใช้ผู้ให้บริการการรับรองความถูกต้องของบุคคลที่สามเช่น Auth0

ตัวเลือกทั้งสองทำงานได้อย่างสมบูรณ์แบบจากมุมมองของข้อกำหนดการทำงานของคุณ ด้วยการพัฒนาที่กำหนดเองคุณจะสามารถควบคุมฟังก์ชั่นที่คุณสนับสนุนได้อย่างเต็มที่ดังนั้นฉันจะเน้นส่วนหนึ่งของคำตอบว่า Auth0 สามารถตอบสนองความต้องการที่คุณระบุไว้ได้อย่างไร

อย่างไรก็ตามก่อนที่จะไปสู่สิ่งนั้นไม่ว่าการตัดสินใจของคุณจะเป็นอย่างไรสำหรับการตรวจสอบสิทธิ์คุณควรมุ่งเน้นไปที่ OpenID Connect แทน OAuth2 หลังจะมีผลบังคับใช้มากขึ้นถ้าคุณวางแผนที่จะมี API ในการผสมและไม่เพียง แต่แบ่งเสาหินออกเป็นเว็บแอปพลิเคชันแยกต่างหาก


วิธีการโยกย้ายผู้ใช้ที่มีอยู่ไปยังระบบที่ใช้ Auth0?

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

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

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

(เอกสารอ้างอิงถึง MySQL เช่นเดียวกับเอ็นจิ้นฐานข้อมูลอื่น ๆ ที่รองรับ)

ในอีกทางหนึ่งคุณสามารถย้ายข้อมูลประจำตัวของผู้ใช้ไปยังฐานข้อมูล Auth0 ได้อย่างราบรื่นโดยใช้ประโยชน์จากกระบวนการโยกย้ายที่อธิบายไว้ในโยกย้ายผู้ใช้ไปยัง Auth0

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

คุณยังสามารถสร้างผู้ใช้ทั้งหมดของคุณใน Auth0 ผ่าน Management API ได้หากคุณต้องการให้พวกเขาทั้งหมดเริ่มใช้อัลกอริทึมการแฮชรหัสผ่านของเราพร้อมกัน สิ่งนี้มีผลข้างเคียงที่ทำให้ผู้ใช้ต้องรีเซ็ตรหัสผ่าน

วิธีการใช้การรับรองความถูกต้องสองขั้นตอนแบบกำหนดเอง (คำถามยืนยัน)

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

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

อย่างไรก็ตามคุณสามารถตัดสินใจที่จะทิ้งคำถามการตรวจสอบและไปที่Auth0 Guardianแทนเพื่อเพิ่มความปลอดภัยของกระบวนการตรวจสอบสิทธิ์

วิธีปรับแต่งรูปลักษณ์ของ UI การรับรองความถูกต้อง

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการปรับแต่ง:

จะป้องกันหน้ายินยอมได้อย่างไร

คุณสามารถใช้ Auth0 ทั้งสองเป็นผู้ให้บริการข้อมูลประจำตัวเพื่อการตรวจสอบความถูกต้องและเป็นเซิร์ฟเวอร์การอนุญาต OAuth2 (ปัจจุบันมีให้บริการเฉพาะในสหรัฐอเมริกาเท่านั้น) สำหรับ API ของคุณ

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

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


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

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

ฉันคิดว่านั่นเป็นปัญหาที่ใหญ่ที่สุดในการรักษาความปลอดภัยของคุณเองมีหลายครั้งที่กำหนดส่งทางลัดและการรักษาความปลอดภัยไม่ใช่เรื่องดีสำหรับการสร้างทางลัด

หากคุณมีคำถามเพิ่มเติมแจ้งให้เราทราบหากคุณคิดว่าฉันอาจมีประโยชน์


ขอบคุณสำหรับรายละเอียดทั้งหมด ฉันจำได้ว่ากำลังดู Auth0 แต่จากสิ่งที่ฉันสามารถบอกได้ Auth0 เป็นแบบคลาวด์เท่านั้น ถูกต้องหรือไม่ เพื่อเหตุผลด้านความปลอดภัยและความเป็นส่วนตัวฉันถูก จำกัด ให้ดูเฉพาะโซลูชันที่ฉันสามารถโฮสต์ในดาต้าเซ็นเตอร์ / คลาวด์ส่วนตัวของฉันได้ Auth0 มีตัวเลือกประเภทนั้นหรือไม่?
Eric B.

ใช่ Auth0 มีความยืดหยุ่นในแง่ของการปรับใช้ / การโฮสต์ วิธีการแก้ปัญหาเมฆไม่ใช่แบบสาธารณะเป็นที่รู้จักกันในปัจจุบันเป็นAuth0 เครื่องใช้ไฟฟ้าและคุณสามารถปรับใช้อย่างใดอย่างหนึ่งในพื้นที่ที่ทุ่มเทของเมฆ Auth0 ของระบบคลาวด์ของคุณหรือศูนย์ข้อมูลของคุณเอง ตรวจสอบเอกสารเครื่องใช้สำหรับข้อมูลเพิ่มเติม หากคุณต้องการข้อมูลรายละเอียดเพิ่มเติมแจ้งให้ฉันทราบฉันสามารถพยายามช่วยคุณโดยตรงหรือชี้คุณไปยังคนที่เหมาะสม
João Angelo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.