Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เพิ่มความคล่องตัวในการรับรองความถูกต้องใน Ruby on Rails ด้วย Auth0:คู่มือสำหรับผู้เริ่มต้น

ตั้งแต่รูปแบบการรับรองความถูกต้องแบบกำหนดเองไปจนถึงรูปแบบ 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 ของเราและไม่พลาดแม้แต่โพสต์เดียว! เพิ่มความคล่องตัวในการรับรองความถูกต้องใน Ruby on Rails ด้วย Auth0:คู่มือสำหรับผู้เริ่มต้น

โธมัส ริบูเลต์

Thomas ผู้เขียนรับเชิญของเราเป็นที่ปรึกษาแบ็กเอนด์และวิศวกรโครงสร้างพื้นฐานคลาวด์ในฝรั่งเศส เป็นเวลากว่า 13 ปีที่เขาทำงานร่วมกับสตาร์ทอัพและบริษัทต่างๆ เพื่อขยายขนาดทีม ผลิตภัณฑ์ และโครงสร้างพื้นฐาน นอกจากนี้ เขายังได้รับการตีพิมพ์หลายครั้งในนิตยสาร GNU/Linux ของฝรั่งเศส และในบล็อกของเขา

บทความทั้งหมดโดย โทมัส ริบูเลต์