ตั้งแต่รูปแบบการรับรองความถูกต้องแบบกำหนดเองไปจนถึงรูปแบบ Plug-and-Play นักพัฒนา Ruby มีตัวเลือกมากมายให้เลือกในปัจจุบัน แต่ดังที่คุณอาจทราบ การสร้างโซลูชันของคุณเองอาจมีค่าใช้จ่ายสูงและเป็นอันตราย หาก Devise เป็นมาตรฐานสำหรับทีมส่วนใหญ่ ทางเลือกอื่นอาจทำให้ชีวิตของคนส่วนใหญ่ง่ายขึ้น
บทความนี้จะครอบคลุมถึงการตั้งค่าและการใช้งาน Auth0 ในแอปพลิเคชัน Ruby on Rails รวมถึงทุกสิ่งที่คุณต้องการเพื่อดำเนินไปอย่างถูกต้อง ตั้งแต่การจัดการบทบาทไปจนถึงการพึ่งพาผู้ให้บริการหลายรายในการตรวจสอบสิทธิ์ผู้ใช้
เริ่มต้นใช้งาน
ต่อไปนี้คือสิ่งที่เราต้องเริ่มต้น:
- บัญชี Auth0
- แอปพลิเคชัน Ruby on Rails (เวอร์ชัน 7.x เป็นต้นไป)
Auth0 เป็นบริการตรวจสอบสิทธิ์บุคคลที่สามพร้อมระดับฟรีที่ให้คุณจัดการผู้ใช้ได้มากถึง 7,000 คน นั่นเป็นอะไรมากมายให้คุณเริ่มต้น และราคาของมันก็สมเหตุสมผลหากคุณต้องการฟีเจอร์ขั้นสูงเพิ่มเติม
การกำหนดค่าแอป Ruby ของเราใน Auth0
เนื่องจากแอปพลิเคชันของคุณต้องใช้ Auth0 ในการตรวจสอบสิทธิ์ผู้ใช้ผ่านการเปลี่ยนเส้นทางและการโทร เราจึงต้องแน่ใจว่าแอปพลิเคชันนั้นปลอดภัย
ในบัญชี Auth0 ของเรา มาสร้างแอปพลิเคชันภายในผู้เช่ากันดีกว่า คุณสามารถสร้างผู้เช่าหลายรายในบัญชีเพื่อแยก:
- ชื่อโดเมน
- สภาพแวดล้อมที่แตกต่างกัน (การพัฒนา การผลิต ฯลฯ)
- ประเทศหรือภูมิภาคที่จะจัดเก็บข้อมูล
เมื่อคุณสร้างผู้เช่ารายแรกแล้ว คุณสามารถสร้างแอปพลิเคชันได้ นั่นคือสิ่งที่เราจะเริ่มต้น
ไปที่แท็บ "การตั้งค่า" ในแผงแอปพลิเคชัน คุณต้องคัดลอกและวางสิ่งต่อไปนี้และบันทึกลงในที่ปลอดภัย:
- ชื่อโดเมน:
01 - รหัสของลูกค้า
- ความลับของลูกค้า
เรายังต้องกรอก URI ของแอปพลิเคชันต่อไปนี้ด้วย เราจะใช้ค่าเหล่านี้สำหรับการตั้งค่าการพัฒนาท้องถิ่นของเรา:
- URL โทรกลับที่อนุญาต:
10(URL Auth0 จะเปลี่ยนเส้นทางไปหลังจากการตรวจสอบสิทธิ์) - URL การออกจากระบบที่อนุญาต:
29(URL Auth0 จะเปลี่ยนเส้นทางไปหลังจากมีคนออกจากระบบ)
มากำหนดค่าแอปของเรากันดีกว่า
การเตรียมแอปพลิเคชัน Ruby on Rails ของเรา
คุณสามารถเริ่มต้นด้วยแอปพลิเคชัน vanilla Ruby on Rails โดยใช้ 33 คำสั่ง
มาสร้างอันที่ใช้ SQLite3 สำหรับฐานข้อมูลและ Tailwind สำหรับไลบรารี CSS กัน ข้ามการติดตั้งการทดสอบขนาดเล็กและตั้งชื่อแอปพลิเคชันว่า "บทความ Auth0":
สร้างโมเดลผู้ใช้ด้วยแอตทริบิวต์เพียงไม่กี่รายการ:
นี่เป็นการสร้างฐานที่เรียบง่ายแต่มีประสิทธิภาพสำหรับแอปพลิเคชันของเรา
การเพิ่ม Auth0 Gem ให้กับแอป
คุณจะต้องมี 42 และ 56รหัส> เพื่อใช้ Auth0 ในแอปพลิเคชัน Ruby on Rails ของคุณ
การกำหนดค่า Auth0
เราจำเป็นต้องสร้างไฟล์การกำหนดค่าขนาดเล็ก (61 ) เพื่อจัดเก็บข้อมูลประจำตัวในสภาพแวดล้อมการพัฒนาของเรา
นอกจากนี้เรายังสามารถพึ่งพาตัวแปรสภาพแวดล้อมได้ที่นี่โดยใช้ erb:
แน่นอนว่าการใช้ข้อมูลรับรอง Ruby on Rails ช่วยให้มั่นใจได้ว่าสิ่งต่างๆ จะเป็นปัจจุบันมากขึ้น
ไฟล์นี้จะถูกใช้ในตัวเริ่มต้น Auth0 (75 ) ซึ่งตอนนี้เราจะสร้าง:
อย่างที่คุณเห็นที่นี่ เรากำลังใช้ 86 เพื่อโหลดเนื้อหาของไฟล์ YAML เป็นแฮชที่สะดวก เราสามารถแทนที่สิ่งนี้ด้วยไลบรารีการจัดการความลับใดๆ ก็ได้ รวมถึงการจัดเก็บข้อมูลรับรองที่เข้ารหัสของ Rails
โปรดสังเกตสิ่งต่อไปนี้:
- ชื่อผู้ให้บริการ (
96) - สามรายการจากไฟล์ YAML อ่านและใช้ผ่าน
108แฮช - The
119คีย์และค่า ซึ่งตรงกับคีย์ที่เรากำหนดค่าไว้ในอินเทอร์เฟซ Auth0 121รหัส> และ136กุญแจอยู่ข้างใน; เราจะกลับมาที่ภายหลัง
เราจำเป็นต้องสร้างอินเทอร์เฟซและองค์ประกอบการกำหนดเส้นทางเพื่อให้สามารถตรวจสอบสิทธิ์ได้
การตั้งค่าเส้นทางและ UI ด้วย Tailwind
ในตัวอย่างนี้ เราจะทำงานร่วมกับแอปพลิเคชัน Ruby on Rails โดยใช้เฟรมเวิร์กเวอร์ชัน 7.1 พร้อมด้วย TailwindCSS
ใช้คำสั่งต่อไปนี้:
จากนั้นเราสามารถเพิ่มตัวควบคุมสองตัวด้วยการดำเนินการดัชนี เพื่อเตรียมทดสอบกระบวนการตรวจสอบสิทธิ์:
ด้วยคำสั่งทั้งสองนี้ สิ่งต่อไปนี้จะถูกสร้างขึ้น:
- ทั้งสอง
146และ158รหัส> ตัวควบคุมพร้อมการดำเนินการดัชนีพร้อมใช้งาน - ทั้งสองเส้นทางที่เกี่ยวข้อง
- มุมมองที่เกี่ยวข้อง
มาเพิ่มตัวควบคุม Auth0 เพื่อจัดการกับการโทรกลับและความล้มเหลว สร้างไฟล์คอนโทรลเลอร์ (160 ) และเพิ่มสิ่งต่อไปนี้:
จากนั้นอัปเดตเส้นทางเพื่อใช้การกระทำทั้งสามนี้:
จากนั้นเราก็สามารถเพิ่ม 179 ได้ และ 184รหัส> ปุ่มในมุมมองสาธารณะและส่วนตัว ตามลำดับ:
ตอนนี้คุณสามารถไปที่ 'http://localhost:3000' ใช้ 197 ปุ่มและคุณจะถูกเปลี่ยนเส้นทางไปยัง ส่วนตัว หน้า ที่นั่นคุณจะพบ 201 ปุ่ม.
มีบางสิ่งที่ขาดหายไป:
- ข้อมูลจากโปรไฟล์ของผู้ใช้
- การระบุผู้ใช้และการจัดการการอนุญาต
การทำงานกับขอบเขตและข้อมูล
ย้อนกลับไปสองสามขั้นตอนและนำตัวเริ่มต้นกลับมา (215 ):
ส่วนสำคัญที่นี่คือขอบเขต:228 . สิ่งนี้เป็นการบอก Auth0 ว่าเราสนใจข้อมูลบางส่วน กล่าวคือ:
- ชื่อผู้ให้บริการ (Auth0)
- A
237รหัส> :ตัวระบุที่ไม่ซ้ำกันเพื่อจับคู่ผู้ใช้ - เป็น
245แฮช:ประกอบด้วยชื่อ, URL ไปยังรูปโปรไฟล์ และคีย์ 'อีเมล' ที่ว่างเปล่า - เป็น
251แฮช:อีกครั้ง พร้อมชื่อและรูปโปรไฟล์ แต่ยังรวมถึงชื่อคู่และนามสกุลด้วย
อ่านเพิ่มเติมเกี่ยวกับหัวข้อขอบเขตในเอกสารประกอบของ Auth0
ข้อมูลข้างต้นมีคุณค่า และคุณควรตรวจสอบให้แน่ใจว่าอย่างน้อยเมื่อเข้าสู่ระบบครั้งแรก คุณได้คัดลอกข้อมูลนั้นลงในตารางในแอปพลิเคชันของคุณ
ในการทำเช่นนั้น เราจำเป็นต้องใช้เนื้อหาของคำขอ-ตอบกลับใน 263 และโดยเฉพาะใน 273 การกระทำ:
ใช้เบรกพอยต์ก่อนการเปลี่ยนเส้นทางเพื่อเจาะลึกแฮชและการทดสอบ
เรามักจะต้องการที่อยู่อีเมลด้วย หากต้องการรับ คุณสามารถอัปเดตขอบเขต:
หลังจากโหลดเซิร์ฟเวอร์แอปพลิเคชันใหม่และทำตามขั้นตอนการเข้าสู่ระบบ คุณจะต้องให้สิทธิ์แอปพลิเคชันในการเข้าถึงข้อมูลเพิ่มเติม
ตอนนี้เราสามารถทำสิ่งนี้ได้ใน 283 การกระทำ:
สิ่งนี้จะช่วยให้มั่นใจได้ว่าเรามีโปรไฟล์ท้องถิ่นที่เป็นปัจจุบันสำหรับผู้ใช้
คำพูดในเซสชัน
เซสชันเป็นแฮชพิเศษในแอปพลิเคชัน Ruby on Rails มีพื้นที่เก็บข้อมูลจำกัดซึ่งสามารถเข้าถึงได้จากตัวควบคุมและมุมมอง และไม่ซ้ำกันสำหรับผู้เยี่ยมชมแต่ละราย
เราสามารถ "เปิด" และ "ปิด" เซสชันได้ หากเราต้องการชุดข้อมูลเฉพาะ เราสามารถตัดสินใจได้ว่าเซสชันจะเปิดอยู่ หากไม่มีข้อมูล แสดงว่าปิดแล้ว
จำบรรทัดต่อไปนี้ในตัวควบคุม Auth0 ของเรา:
อันแรกเขียนค่าใน 294 คีย์แฮชของแฮชของเซสชัน ในขณะที่อันที่สองเพิ่งล้างแฮชของเซสชัน
จากนั้นเราสามารถกำหนดวิธีการช่วยเหลือต่อไปนี้ใน 301 :
ข้อกังวลด้านความปลอดภัย
ตอนนี้ลองใช้สิ่งนี้เป็นข้อกังวลสำหรับผู้ควบคุมของเรา แนวคิดคือการกำหนดตัวควบคุมที่กำหนดให้ผู้ใช้ต้องเข้าสู่ระบบเพื่อเข้าถึงตัวควบคุม เช่น 310 ของเรา .
เราสามารถเขียนไฟล์ข้อกังวลต่อไปนี้:
จากนั้นเราก็สามารถใช้มันในคอนโทรลเลอร์ของเราได้ดังนี้:
หากผู้เยี่ยมชมไม่ได้เข้าสู่ระบบ แต่พยายามเปิด 321 หน้าเหล่านั้นจะถูกเปลี่ยนเส้นทางไปยังรูทของไซต์โดยอัตโนมัติ
การบูรณาการกับผู้ให้บริการรายอื่น
คุณสามารถพึ่งพาผู้ให้บริการหลายรายผ่าน Auth0 อย่างไรก็ตาม Google ถูกกำหนดให้เป็นค่าเริ่มต้น สำหรับหลายๆ บริษัท แค่นั้นก็เพียงพอแล้ว
หากคุณต้องการผู้ให้บริการเพิ่มเติม ให้ไปที่ การรับรองความถูกต้อง เมนูสำหรับผู้เช่าที่เกี่ยวข้องใน Auth0 จากนั้นเลือก Social เมนูย่อยที่คุณสามารถตั้งค่าผู้ให้บริการเพิ่มเติมได้
นอกจากนี้ ยังเป็นที่น่าสังเกตว่าคุณสามารถกำหนดค่าการรับรองความถูกต้องแบบหลายปัจจัย (MFA) ด้วย Auth0 ได้เช่นกัน
กระบวนการจะยังคงเหมือนเดิมยกเว้นขั้นตอนการกำหนดค่าเหล่านั้น แอปพลิเคชันของเราจะส่งคืนข้อมูลผู้เยี่ยมชมเพื่อพิสูจน์ว่าผู้เยี่ยมชมได้รับการรับรองความถูกต้องแล้วเท่านั้น
กำลังเปิดรับการอนุญาต
ตอนนี้เราสามารถตรวจสอบสิทธิ์ผู้ใช้และส่งข้อมูลไปยังแอปพลิเคชันของเราผ่านการโทรกลับ เราได้เห็นวิธีการดึงที่อยู่อีเมลของผู้ใช้ออกจากแฮชแล้ว และค้นหาผู้ใช้ที่เกี่ยวข้องในฐานข้อมูลของเรา
จากนั้น เราสามารถกำหนดนโยบายการอนุญาตได้
Pundit เป็นตัวเลือกที่ดีในการกำหนดและใช้นโยบายการอนุญาต แต่ยังต้องอาศัยการตรวจสอบบทบาทของผู้ใช้
ใช้ 337 ที่จริงแล้วแอตทริบิวต์เป็นวิธีที่ง่ายที่สุด คุณสามารถกรอกข้อมูลได้เมื่อสร้างผู้ใช้ในคอนโซล Rails หรืออินเทอร์เฟซส่วนหลังของแอปพลิเคชันของคุณ ก่อนที่ผู้ใช้จะพยายามเข้าสู่ระบบครั้งแรก
หรือคุณสามารถรับรายชื่ออีเมลของผู้ดูแลระบบและจับคู่อีเมลของผู้ใช้กับรายชื่อเมื่อสร้างผู้ใช้
แค่นั้นแหละ!
สิ่งที่เราได้กล่าวถึง
ในบทความนี้ เราได้ตั้งค่า:
- ผู้เช่าและแอปพลิเคชันใน Auth0
- อัญมณีที่เกี่ยวข้องกับ Auth0 ในแอปพลิเคชัน Ruby on Rails
- เส้นทางและมุมมองในแอปพลิเคชัน
จากนั้นเรา:
- ตรวจสอบแนวคิดของเซสชันและวิธีใช้งาน
- สร้างเครื่องมือพื้นฐานเพื่อตรวจสอบว่าผู้ใช้เข้าสู่ระบบหรือไม่
- เพิ่มข้อกังวลของผู้ควบคุมเพื่อรักษาความปลอดภัยให้กับผู้ควบคุมตามข้อกำหนดในการเข้าสู่ระบบ
- เห็นวิธีจับคู่ผู้ใช้กับบทบาทของพวกเขา
Auth0 และผู้ให้บริการการรับรองความถูกต้องอื่นๆ สามารถช่วยคุณรวมการรับรองความถูกต้องที่ล้ำสมัยในแอปพลิเคชัน Ruby on Rails ของคุณโดยไม่ต้องเขียนโค้ดมากนัก มักจะเป็นตัวเลือกที่ดีกว่าการพึ่งพาการใช้งานเลเยอร์การรับรองความถูกต้องของคุณเอง หรือแม้แต่การใช้ Gem เช่น Devise
ขอให้สนุกกับการเขียนโค้ด!
ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>
โธมัส ริบูเลต์
Thomas ผู้เขียนรับเชิญของเราเป็นที่ปรึกษาแบ็กเอนด์และวิศวกรโครงสร้างพื้นฐานคลาวด์ในฝรั่งเศส เป็นเวลากว่า 13 ปีที่เขาทำงานร่วมกับสตาร์ทอัพและบริษัทต่างๆ เพื่อขยายขนาดทีม ผลิตภัณฑ์ และโครงสร้างพื้นฐาน นอกจากนี้ เขายังได้รับการตีพิมพ์หลายครั้งในนิตยสาร GNU/Linux ของฝรั่งเศส และในบล็อกของเขา
บทความทั้งหมดโดย โทมัส ริบูเลต์