Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Auth0 के साथ Ruby on Rails में ऑथेंटिकेशन को सुव्यवस्थित करना: एक शुरुआती गाइड

कस्टम-मेड से प्लग-एंड-प्ले ऑथेंटिकेशन के रूपों तक, Ruby डेवलपर्स के पास आज चुनने के लिए बहुत कुछ है। फिर भी, जैसा कि आप जानते होंगे, अपना समाधान बनाना महंगा और खतरनाक हो सकता है। यदि Devise अधिकांश टीमों के लिए वास्तविक मानक है, तो एक विकल्प अधिकांश के जीवन को सरल बना सकता है।

यह आलेख एक Ruby on Rails एप्लिकेशन में Auth0 की सेटअप और उपयोग को कवर करेगा, जिसमें ठीक से शुरू करने के लिए आपको जो कुछ भी चाहिए, भूमिकाओं को संभालने से लेकर उपयोगकर्ताओं को प्रमाणित करने के लिए कई प्रदाताओं पर भरोसा करने तक शामिल है।

शुरुआत करना

यहां हमें शुरू करने के लिए क्या चाहिए:

  • एक Auth0 खाता
  • एक Ruby on Rails एप्लिकेशन (संस्करण 7.x आगे)

Auth0 एक थर्ड-पार्टी ऑथेंटिकेशन सेवा है जिसमें एक फ्री टियर है जो आपको 7,000 उपयोगकर्ताओं तक संभालने देता है। यह शुरू करने के लिए बहुत है, और यदि आपको अधिक उन्नत सुविधाओं की आवश्यकता है तो इसकी कीमत उचित है।

Auth0 में हमारे Ruby ऐप को कॉन्फिगर करना

चूंकि आपका एप्लिकेशन रीडायरेक्ट्स और कॉल्स के माध्यम से उपयोगकर्ताओं को प्रमाणित करने के लिए Auth0 पर निर्भर करेगा, हमें यह सुनिश्चित करना होगा कि यह सुरक्षित रहे।

हमारे Auth0 खाते में, आइए एक टेनेन्ट के भीतर एक एप्लिकेशन बनाएं। आप एक खाते में कई टेनेन्ट बना सकते हैं अलग करने के लिए:

  • डोमेन नाम।
  • विभिन्न वातावरण (डेवलपमेंट, प्रोडक्शन, आदि)।
  • वह देश या क्षेत्र जिसमें डेटा संग्रहीत किया जाएगा।

एक बार जब आप अपना पहला टेनेन्ट बना लेते हैं, तो आप एक एप्लिकेशन बना सकते हैं। यहीं से हम शुरू करेंगे।

"Settings" टैब पर एप्लिकेशन पैनल में जाएं। आपको निम्नलिखित कॉपी और पेस्ट करने और इसे एक सुरक्षित स्थान पर सहेजने की आवश्यकता है:

  • डोमेन नाम: app-name.[eu,us,..].auth0.com
  • क्लाइंट की ID
  • क्लाइंट का Secret

हमें निम्नलिखित एप्लिकेशन URIs भी भरने होंगे। हम अपने स्थानीय डेवलपमेंट सेटअप के लिए इन मूल्यों का उपयोग करेंगे:

  • Allowed Callback URLs: https://localhost:3000/auth/auth0/callback (वह URL जिस पर Auth0 प्रमाणीकरण के बाद रीडायरेक्ट करेगा)।
  • Allowed Logout URLs: https://localhost:3000 (वह URL जिस पर Auth0 किसी के लॉग आउट करने के बाद रीडायरेक्ट करेगा)।

आइए आगे बढ़ें और अपने ऐप को कॉन्फिगर करें।

हमारे Ruby on Rails एप्लिकेशन को तैयार करना

आप rails new कमांड का उपयोग करके एक वैनिला Ruby on Rails एप्लिकेशन के साथ शुरू कर सकते हैं।

आइए एक ऐसा जनरेट करें जो डेटाबेस के लिए SQLite3 और CSS लाइब्रेरी के लिए Tailwind पर निर्भर करता है। मिनी-टेस्ट की स्थापना को छोड़ें और एप्लिकेशन को "Auth0 article" नाम दें:



केवल कुछ विशेषताओं के साथ एक User मॉडल बनाएं:



यह हमारे एप्लिकेशन के लिए एक सरल लेकिन कुशल आधार बनाता है।

ऐप में Auth0 जेम जोड़ना

अपने Ruby on Rails एप्लिकेशन में Auth0 का उपयोग करने के लिए आपको omniauth-auth0 और omniauth-rails_csrf_protection की आवश्यकता होगी।



Auth0 कॉन्फिगर करना

हमें अपने डेवलपमेंट वातावरण में क्रेडेंशियल्स संग्रहीत करने के लिए एक छोटी कॉन्फिगरेशन फाइल (config/auth0.yml) बनाने की आवश्यकता है।



हम यहां कुछ erb का उपयोग करके एनवायरनमेंट वेरिएबल्स पर भी भरोसा कर सकते हैं:



बेशक, Ruby on Rails क्रेडेंशियल्स पर भरोसा करना सुनिश्चित करता है कि चीजें अधिक अद्यतित रहें।

इस फाइल का उपयोग Auth0 इनिशियलाइज़र (config/initializers/auth0.rb) में किया जाएगा, जिसे हम अब बनाएंगे:



जैसा कि आप यहां देख सकते हैं, हम एक YAML फाइल की सामग्री को एक सुविधाजनक हैश के रूप में लोड करने के लिए Rails.application.config_for का उपयोग कर रहे हैं। हम इसे किसी भी सीक्रेट हैंडलिंग लाइब्रेरी से बदल सकते हैं, जिसमें Rails एन्क्रिप्टेड क्रेडेंशियल स्टोरेज शामिल है।

निम्नलिखित पर ध्यान दें:

  • प्रदाता नाम (:auth0)
  • YAML फाइल से तीन आइटम, AUTH0_CONFIG हैश के माध्यम से पढ़े और उपयोग किए गए।
  • callback_path कुंजी और मान, जिसे हमने Auth0 इंटरफेस में कॉन्फिगर किया था।
  • authorize_params और इसके अंदर scope कुंजी; हम बाद में उस पर वापस आएंगे।

हमें प्रमाणीकरण की अनुमति देने के लिए इंटरफेस और रूटिंग तत्व बनाने की आवश्यकता है।

Tailwind के साथ रूट्स और UI सेट अप करना

इस उदाहरण में, हम Ruby on Rails फ्रेमवर्क के संस्करण 7.1 का उपयोग करने वाले एप्लिकेशन के साथ काम करेंगे जिसमें TailwindCSS है।

निम्नलिखित कमांड का उपयोग करें:



हम फिर इंडेक्स एक्शन के साथ दो कंट्रोलर जोड़ सकते हैं, प्रमाणीकरण प्रक्रिया का परीक्षण करने की तैयारी कर रहे हैं:



उन दो कमांड के साथ, निम्नलिखित बनाए जाते हैं:

  • public_controller.rb और private_controller.rb दोनों कंट्रोलर, इंडेक्स एक्शन के साथ उपयोग के लिए तैयार
  • दोनों संबंधित रूट्स
  • संबंधित व्यू

आइए कॉलबैक और विफलताओं को संभालने के लिए Auth0 कंट्रोलर जोड़ें। कंट्रोलर फाइल बनाएं (bin/rails g controller auth0) और निम्नलिखित जोड़ें:



फिर उन तीन एक्शन का उपयोग करने के लिए रूट्स अपडेट करें:



और फिर हम पब्लिक और प्राइवेट व्यू में Login और Logout बटन जोड़ सकते हैं:



अब आप 'https://localhost:3000' पर जा सकते हैं। Login बटन का उपयोग करें और आपको private पेज पर रीडायरेक्ट किया जाएगा। वहां, आपको एक Logout बटन मिलेगा।

हालांकि, कुछ चीजें गायब हैं:

  • उपयोगकर्ता की प्रोफाइल से डेटा
  • उपयोगकर्ता की पहचान करना और ऑथोराइजेशन संभालना

स्कोप और डेटा के साथ काम करना

आइए कुछ कदम पीछे हटें और इनिशियलाइज़र (config/initializers/auth0.rb) को वापस लाएं:



यहां महत्वपूर्ण टुकड़ा स्कोप है: openid profile। यह Auth0 को बताता है कि हम कुछ जानकारी में रुचि रखते हैं, अर्थात्:

  • प्रदाता नाम (Auth0)
  • एक uid: एक उपयोगकर्ता से मिलान करने के लिए एक अद्वितीय पहचानकर्ता
  • एक info हैश: एक नाम, प्रोफाइल चित्र का URL, और एक खाली 'email' कुंजी युक्त
  • एक extra_info हैश: फिर से, एक नाम और प्रोफाइल चित्र के साथ, लेकिन दिए गए और पारिवारिक नामों की एक जोड़ी भी

Auth0 के दस्तावेज़ीकरण में स्कोप के विषय पर और पढ़ें।

उपरोक्त जानकारी मूल्यवान है, और आपको यह सुनिश्चित करना चाहिए कि, कम से कम पहले लॉगिन पर, आप उस डेटा को अपने एप्लिकेशन में एक टेबल में कॉपी करते हैं।

ऐसा करने के लिए, हमें auth0_controller में अनुरोध-प्रतिक्रिया की सामग्री का उपयोग करने की आवश्यकता है, और विशेष रूप से, callback एक्शन में:



रीडायरेक्ट से पहले एक ब्रेकपॉइंट का उपयोग करके हैश में खोदें और प्रयोग करें।

हम आमतौर पर ईमेल पता भी चाहते हैं। इसे प्राप्त करने के लिए, आप स्कोप को अपडेट कर सकते हैं:



एप्लिकेशन सर्वर को पुनः लोड करने और लॉगिन चरणों से गुजरने के बाद, आपको एप्लिकेशन को अतिरिक्त जानकारी तक पहुंच देने की आवश्यकता होगी।

अब हम callback एक्शन में ऐसा कुछ कर सकते हैं:



यह सुनिश्चित करेगा कि हमारे पास उपयोगकर्ता के लिए एक स्थानीय, अद्यतित प्रोफाइल है।

सत्रों पर एक शब्द

एक सत्र एक Ruby on Rails एप्लिकेशन में एक विशेष हैश है। इसमें सीमित स्टोरेज है जो कंट्रोलर्स और व्यूज से सुलभ है और प्रत्येक विजिटर के लिए अद्वितीय है।

हम सत्र को "खोल" और "बंद" कर सकते हैं। यदि हमें एक विशिष्ट डेटासेट की आवश्यकता है, तो हम तय कर सकते हैं कि एक सत्र खुला है। यदि इसमें कोई डेटा नहीं है, तो यह बंद है।

हमारे Auth0 कंट्रोलर में निम्नलिखित पंक्तियों को याद रखें:



पहला हैश में raw_info कुंजी में मान को सत्र हैश में लिखता है, जबकि दूसरा केवल सत्र हैश को साफ करता है।

हम तब ApplicationHelper में निम्नलिखित हेल्पर मेथड को परिभाषित कर सकते हैं:



एक सुरक्षा चिंता

अब आइए इसे हमारे कंट्रोलर्स के लिए एक चिंता के रूप में उपयोग करें। विचार एक कंट्रोलर को परिभाषित करना है जिसमें उपयोगकर्ताओं को लॉग इन करने की आवश्यकता होती है, जैसे हमारे private_controller।

हम निम्नलिखित चिंता फाइल लिख सकते हैं:



हम तब इसे अपने कंट्रोलर्स में ऐसे उपयोग कर सकते हैं:



यदि कोई विजिटर लॉग इन नहीं है, लेकिन फिर /private/index पेज खोलने का प्रयास करता है, तो वे स्वचालित रूप से साइट के रूट पर रीडायरेक्ट हो जाएंगे।

अन्य प्रदाताओं के साथ एकीकरण

आप Auth0 के माध्यम से कई प्रदाताओं पर भरोसा कर सकते हैं। हालांकि, Google को डिफ़ॉल्ट रूप से परिभाषित किया गया है। कई कंपनियों के लिए, यह पर्याप्त है।

यदि आपको अधिक प्रदाताओं की आवश्यकता है, तो Auth0 में संबंधित टेनेन्ट के लिए Authentication मेनू पर जाएं, और फिर Social सबमेनू, जहां आप अतिरिक्त प्रदाताओं को सेट अप कर सकते हैं।

यह ध्यान देने योग्य भी है कि आप Auth0 के साथ मल्टी-फैक्टर ऑथेंटिकेशन (MFA) भी कॉन्फिगर कर सकते हैं।

प्रक्रिया उन कॉन्फिगरेशन चरणों को छोड़कर समान रहेगी। हमारा एप्लिकेशन केवल यह साबित करने के लिए विजिटर डेटा लौटाएगा कि एक विजिटर प्रमाणित किया गया है।

ऑथोराइजेशन की ओर खुलना

अब हम उपयोगकर्ताओं को प्रमाणित कर सकते हैं और कॉलबैक के माध्यम से उनकी जानकारी को हमारे एप्लिकेशन में भेज सकते हैं। हम पहले ही देख चुके हैं कि हैश से उपयोगकर्ता का ईमेल पता कैसे प्राप्त करें और हमारे डेटाबेस में प्रासंगिक उपयोगकर्ता को ढूंढें।

वहां से, हम ऑथोराइजेशन नीतियों को परिभाषित कर सकते हैं।

Pundit ऑथोराइजेशन नीतियों को परिभाषित करने और उपयोग करने के लिए एक बढ़िया विकल्प है, फिर भी यह उपयोगकर्ता की भूमिका की जांच पर निर्भर करता है।

role विशेषता का उपयोग करना, वास्तव में, सबसे आसान तरीका है। आप इसे Rails कंसोल या अपने एप्लिकेशन के बैक-एंड इंटरफेस में उपयोगकर्ता बनाते समय भर सकते हैं, उपयोगकर्ता के पहले लॉगिन प्रयास से पहले।

या आप एडमिन के ईमेल की सूची प्राप्त कर सकते हैं और उपयोगकर्ता बनाते समय उपयोगकर्ता के ईमेल का सूची से मिलान कर सकते हैं।



और बस!

हमने क्या कवर किया

इस आलेख में, हमने सेट अप किया:

  • Auth0 में एक टेनेन्ट और एप्लिकेशन
  • Ruby on Rails एप्लिकेशन में Auth0-संबंधित जेम्स
  • एप्लिकेशन में रूट्स और व्यूज

फिर हमने:

  • सत्र की अवधारणा की समीक्षा की और देखा कि इसका उपयोग कैसे करें
  • जांचने के लिए बेस टूलिंग बनाई कि क्या उपयोगकर्ता लॉग इन है
  • लॉगिन आवश्यकता के पीछे कंट्रोलर्स को सुरक्षित करने के लिए एक कंट्रोलर चिंता जोड़ी
  • देखा कि उपयोगकर्ताओं को उनकी भूमिकाओं से कैसे मिलान करें

Auth0 और अन्य ऑथेंटिकेशन प्रदाता आपको अपनी Ruby on Rails एप्लिकेशन में बहुत अधिक कोड लिखे बिना अत्याधुनिक ऑथेंटिकेशन को एकीकृत करने में मदद कर सकते हैं। यह अक्सर ऑथेंटिकेशन लेयर के अपने स्वयं के कार्यान्वयन पर भरोसा करने या यहां तक कि Devise जैसे जेम्स का उपयोग करने से बेहतर विकल्प होता है।

हैप्पी कोडिंग!

P.S. यदि आप Ruby Magic पोस्ट पढ़ना चाहते हैं जैसे ही वे प्रेस से निकलते हैं, तो हमारे Ruby Magic न्यूज़लेटर की सदस्यता लें और कभी भी एक भी पोस्ट मिस न करें!

Auth0 के साथ Ruby on Rails में ऑथेंटिकेशन को सुव्यवस्थित करना: एक शुरुआती गाइड

Thomas Riboulet

हमारे अतिथि लेखक Thomas फ्रांस में स्थित एक कंसल्टेंट बैकएंड और क्लाउड इन्फ्रास्ट्रक्चर इंजीनियर हैं। 13 से अधिक वर्षों से, उन्होंने स्टार्टअप्स और कंपनियों के साथ उनकी टीमों, उत्पादों, और इन्फ्रास्ट्रक्चर को स्केल करने के लिए काम किया है। उन्हें फ्रांस की GNU/Linux मैगज़ीन में और उनके ब्लॉग पर कई बार प्रकाशित किया गया है।

Thomas Riboulet के सभी आलेख

  1. गूगल API के बिना एंड्रॉइड में स्पीच रिकग्नाइज़र कैसे विकसित करें? गूगल API के बिना एंड्रॉइड में स्पीच रिकग्नाइज़र कैसे विकसित करें?

    एंड्रॉइड में ऑन-डिवाइस स्पीच रिकग्निशन (गूगल API के बिना) यह ट्यूटोरियल SpeechRecognizer API का उपयोग करके ऑन-डिवाइस स्पीच रिकग्निशन लागू करने का तरीका दिखाता है, जो इंटरनेट के बिना काम करता है (यदि डिवाइस ऑफलाइन मॉडल सपोर्ट करता है)। आवश्यक अनुमतियाँ <uses-permission android:name=android.permis

  1. पायथन प्रोग्राम: श्रृंखला 1/1! + 2/2! + 3/3! + ... + n/n! का योग ज्ञात करें पायथन प्रोग्राम: श्रृंखला 1/1! + 2/2! + 3/3! + ... + n/n! का योग ज्ञात करें

    इस लेख में, हम दी गई समस्या के समाधान और दृष्टिकोण के बारे में जानेंगे।समस्या कथन - एक पूर्णांक इनपुट n दिया गया है, हमें श्रृंखला 1/1! + 2/2! + 3/3! + 4/4! + ... + n/n! का योग ज्ञात करना होगा।यहां हम फॉर लूप लागू कर रहे हैं, इसलिए हमें O(n) समय जटिलता प्राप्त होती है।दक्षता प्राप्त करने के लिए हम उ

  1. डेटा स्ट्रक्चर में इष्टतम बाइनरी सर्च ट्री डेटा स्ट्रक्चर में इष्टतम बाइनरी सर्च ट्री

    पूर्णांक का एक सेट सॉर्टेड क्रम में दिया गया है और दूसरा सरणी freq आवृत्ति गणना के लिए है। हमारा कार्य उन डेटा के साथ एक बाइनरी सर्च ट्री बनाना है ताकि सभी खोजों के लिए न्यूनतम लागत प्राप्त हो सके।सब-प्रॉब्लम्स के समाधान को हल करने और स्टोर करने के लिए एक सहायक सरणी cost[n, n] बनाई जाती है। कॉस्ट मै