2013-08-19 15 views
6

मैं सिनात्रा के साथ एक एपीआई बना रहा हूं (क्लाइंट साइड के लिए कोणीय का उपयोग करके और दूसरों को एपीआई तक पहुंच प्राप्त करना चाहता हूं) और यह ओएथ प्रदाता भी हो। मैं सोच रहा हूं कि सबसे अच्छा मार्ग क्या है (मौजूदा रत्नों से काम करें या वार्डन या कुछ से अपने स्वयं के समाधान को रोल करें)।सिनात्रा रीस्ट एपीआई ऐप के लिए प्रमाणीकरण

रेल के साथ प्रमाणीकरण और ओथ के लिए तैयार और द्वारपाल का उपयोग किया है, यह सोचकर कि सिनात्रा के लिए सबसे अच्छा समाधान क्या है।

आदर्श रूप से मैं विचारों को नहीं चाहता हूं या मौजूदा समाधान के कार्यों को विस्तार/संशोधित करने में सक्षम हूं, क्योंकि मैं पूरी तरह से एक एपीआई के रूप में इसके साथ बातचीत कर रहा हूं।

+2

आप अंगूर की जांच करना चाहेंगे https://github.com/intridea/grape – zotherstupidguy

उत्तर

0

Sinatra API Authentication देखें।

त्वरित सारांश:

  • सिनात्रा कोई अंतर्निहित प्रमाणन है।
  • अपने आप को बनाने के लिए सबसे अच्छा है (लिंक देखें)।
  • रत्न उपलब्ध हैं, लेकिन शायद आपको एपीआई के रूप में सरल कुछ के लिए उनकी आवश्यकता नहीं होगी।
1

मैं अभी हाल ही में एस/ओ से निम्नलिखित जवाब का उपयोग कर

What is a very simple authentication scheme for Sinatra/Rack

यह एक उपयोगकर्ता मॉडल का तात्पर्य ऐसा ही किया था, लेकिन वह उपयोग करने के बजाय, मैं सिर्फ एक उपयोगकर्ता और व्यवस्थापक पासवर्ड सेट मेरी विन्यास फाइल में। तब मेरे पास एक लॉगिन फॉर्म था जिसने अभी पासवर्ड लिया था। जब उपयोगकर्ता उस पासवर्ड में प्रवेश करता है, तो मैंने इसे सेटिंग में से एक के विरुद्ध चेक किया और सत्र ['उपयोगकर्ता'] को: admin या: उपयोगकर्ता को जो भी मिलान किया है उसके अनुसार सेट करें (या शून्य अगर कोई नहीं)। फिर मेरे प्रत्येक मार्ग पर, मैंने ऑथ कहा:: उपयोगकर्ता या ऑथ:: तदनुसार व्यवस्थापक।

1

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

से मैं क्या सिनात्रा के डॉक्स में देखा है, तो आप इस तरह एक सत्र-आधारित प्रमाणीकरण प्रणाली बना सकता है: कुकी टोकन लौटे वापस पारित करने के लिए

enable :session 
disable :show_exceptions 

use Rack::Session::Pool, 
    key: 'session_id' 

post '/login' do 
    user = User.login_success(params) 
    halt 401 if user.nil? 
    session[:user] = user 
    200 
end 

get '/fun' do 
    user = session[:user] 
    halt 401 if user.nil? 
    halt 403 if !user.has_permission_for '/fun' 
    "fun was had" 
end 

अब सभी आप अपने ग्राहक में क्या करने की जरूरत है एपीआई फ़ंक्शन का अनुरोध करते समय प्रारंभिक विज़िट के जवाब में। यह किसी भी वेब क्लाइंट लाइब्रेरी के साथ किया जा सकता है जो कुकी स्टोर्स (जैसे libcurl) का समर्थन करता है या सत्र कुकी को मैन्युअल रूप से अनुरोध हेडर में डालकर। Rack::Minitest कार्यक्षमता कुकीज़ का भी समर्थन करती है, ताकि आप अपने एपीआई को न्यूनतम से जांच सकें।

संबंधित मुद्दे