
SAML Service Provider पक्ष के SSO को लागू करने वाली Ruby लाइब्रेरी, जो authn अनुरोधों, प्रतिक्रिया सत्यापन, XML हस्ताक्षर जाँच और IdP मेटाडेटा पार्सिंग को संभालती है।
Ruby SAML के माइनर और पैच संस्करण ब्रेकिंग बदलाव पेश कर सकते हैं। नए Ruby SAML संस्करणों में अपग्रेड करने के मार्गदर्शन के लिए कृपया UPGRADING.md पढ़ें।
CVE-2025-66568 और CVE-2025-66567। ruby-saml < 1.18.0 संस्करण (1.12.4 सहित) को प्रभावित करता है, 1.18.1 में अपग्रेड करें
CVE-2025-54572 ruby-saml < 1.18.1 संस्करण को प्रभावित करता है
ruby-saml < 1.18.0 को प्रभावित करने वाली गंभीर भेद्यताएँ हैं, जिनमें से दो SAML प्रमाणीकरण बायपास (CVE-2025-25291, CVE-2025-25292, CVE-2025-25293) की अनुमति देती हैं। कृपया एक निश्चित संस्करण (1.18.0) में अपग्रेड करें
यदि आपको लगता है कि आपने इस gem में कोई सुरक्षा भेद्यता खोजी है, तो कृपया इसकी रिपोर्ट मेंटेनर को ईमेल द्वारा करें: [email protected]
ओपन सोर्स इकोसिस्टम को सुरक्षित करने के लिए निम्नलिखित प्रायोजकों का धन्यवाद:
Google खोज परिणामों तक पहुँचने के लिए एक रीयल-टाइम API। यह प्रॉक्सी को संभालता है, कैप्चा हल करता है, और आपके लिए सभी समृद्ध संरचित डेटा को पार्स करता है
सुरक्षित सॉफ़्टवेयर बनाने, स्केल करने और वितरित करने के लिए पूर्ण डेवलपर प्लेटफ़ॉर्म।
मैसेज क्यूइंग और स्ट्रीमिंग को सरल बनाना। सर्वर प्रबंधन विशेषज्ञों पर छोड़ें, ताकि आप शानदार एप्लिकेशन बनाने पर ध्यान केंद्रित कर सकें।
Ruby SAML लाइब्रेरी SAML प्राधिकरण के क्लाइंट पक्ष को लागू करने के लिए है, अर्थात यह आइडेंटिटी प्रोवाइडर से प्राधिकरण आरंभीकरण और पुष्टिकरण अनुरोधों के प्रबंधन का एक साधन प्रदान करती है।
SAML प्राधिकरण एक दो-चरणीय प्रक्रिया है और आपसे दोनों के लिए समर्थन लागू करने की अपेक्षा की जाती है।
हमने Rails 4 के लिए एक डेमो प्रोजेक्ट बनाया है जो इस लाइब्रेरी के नवीनतम संस्करण का उपयोग करता है: ruby-saml-example
ruby-saml लाइब्रेरी इस जोखिम को कम करने में मदद करने के लिए उपकरण प्रदान करती है, लेकिन आवश्यक
लॉजिक को लागू करना आपकी ज़िम्मेदारी है। अतिरिक्त
मार्गदर्शन के लिए रीप्ले हमलों को रोकना देखें।निम्नलिखित Ruby संस्करण CI परीक्षण द्वारा कवर किए गए हैं:
Ruby SAML का उपयोग करने के लिए आपको gem इंस्टॉल करना होगा (या तो मैन्युअल रूप से या Bundler का उपयोग करके), और अपने Ruby एप्लिकेशन में लाइब्रेरी को require करना होगा:
Gemfile का उपयोग करना
# latest stable
gem 'ruby-saml', '~> 1.18.0'
# or track master for bleeding-edge
gem 'ruby-saml', :github => 'saml-toolkits/ruby-saml'
RubyGems का उपयोग करना
gem install ruby-saml
आपको पूरा Ruby SAML gem आवश्यक हो सकता है:
require 'onelogin/ruby-saml'
या फिर केवल आवश्यक घटकों को अलग-अलग:
require 'onelogin/ruby-saml/authrequest'
यह gem Nokogiri को एक dependency के रूप में उपयोग करता है, जिसने Nokogiri 1.6 में Ruby 1.8.x के लिए समर्थन बंद कर दिया। Ruby 1.8.7 पर इस gem को इंस्टॉल करते समय, आपको यह सुनिश्चित करना होगा कि Nokogiri का 1.6 से पहले का संस्करण इंस्टॉल या निर्दिष्ट किया गया हो, यदि पहले से नहीं किया गया है।
Gemfile का उपयोग करना
gem 'nokogiri', '~> 1.5.10'
RubyGems का उपयोग करना
gem install nokogiri --version '~> 1.5.10'
SAML एकीकरण समस्याओं का निवारण करते समय, आपके लिए इस gem के बिज़नेस लॉजिक के आउटपुट की जाँच करना अत्यंत सहायक होगा। डिफ़ॉल्ट रूप से, जब gem का उपयोग Rails संदर्भ में किया जाता है तो लॉग संदेश RAILS_DEFAULT_LOGGER पर भेजे जाते हैं, और जब gem का उपयोग Rails के बाहर किया जाता है तो STDOUT पर भेजे जाते हैं।
डिफ़ॉल्ट व्यवहार को ओवरराइड करने और लॉग संदेशों के गंतव्य को नियंत्रित करने के लिए, gem के लॉगिंग सिंगलटन को एक ruby Logger ऑब्जेक्ट प्रदान करें:
OneLogin::RubySaml::Logging.logger = Logger.new('/var/log/ruby-saml.log')
यह पहला अनुरोध है जो आपको identity provider से प्राप्त होगा। यह आपके एप्लिकेशन पर उस विशिष्ट URL पर पहुँचेगा जिसे आपने अपने SAML initialization point के रूप में घोषित किया है। इस initialization की प्रतिक्रिया identity provider पर वापस एक redirect है, जो कुछ इस तरह दिख सकती है (अभी saml_settings method call को अनदेखा करें):
def init
request = OneLogin::RubySaml::Authrequest.new
redirect_to(request.create(saml_settings))
end
यदि SP जानता है कि IdP में किसे प्रमाणित किया जाना चाहिए, तो यह उस जानकारी को निम्नानुसार प्रदान कर सकता है:
def init
request = OneLogin::RubySaml::Authrequest.new
saml_settings.name_identifier_value_requested = "[email protected]"
saml_settings.name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
redirect_to(request.create(saml_settings))
end
एक बार जब आप आइडेंटिटी प्रोवाइडर पर वापस रीडायरेक्ट कर देते हैं, तो यह सुनिश्चित करेगा कि उपयोगकर्ता को
अधिकृत कर दिया गया है और अंतिम उपभोग के लिए आपके एप्लिकेशन पर वापस रीडायरेक्ट कर देगा।
यह कुछ इस तरह दिख सकता है (authorize_success और authorize_failure
मेथड्स आपके एप्लिकेशन के लिए विशिष्ट हैं):
def consume
response = OneLogin::RubySaml::Response.new(params[:SAMLResponse], :settings => saml_settings)