2013-11-21 8 views
6

मैं अपने आवेदन में OAuth 2 को कार्यान्वित कर रहा हूं, और मेरे पास पहले से लॉगिन/रीफ्रेश टोकन है लेकिन मुझे लॉगआउट के साथ कुछ परेशानी हो रही है।Doorkeeper टोकन

मैं मार्गों के इस सेट है द्वारपाल द्वारा उत्पन्न करता है:

Routes for Doorkeeper::Engine: 
      authorization GET /authorize(.:format)     doorkeeper/authorizations#new 
      authorization POST /authorize(.:format)     doorkeeper/authorizations#create 
      authorization DELETE /authorize(.:format)     doorkeeper/authorizations#destroy 
        token POST /token(.:format)      doorkeeper/tokens#create 
      applications GET /applications(.:format)    doorkeeper/applications#index 
         POST /applications(.:format)    doorkeeper/applications#create 
     new_application GET /applications/new(.:format)   doorkeeper/applications#new 
     edit_application GET /applications/:id/edit(.:format)  doorkeeper/applications#edit 
      application GET /applications/:id(.:format)   doorkeeper/applications#show 
         PUT /applications/:id(.:format)   doorkeeper/applications#update 
         DELETE /applications/:id(.:format)   doorkeeper/applications#destroy 
authorized_applications GET /authorized_applications(.:format)  doorkeeper/authorized_applications#index 
authorized_application DELETE /authorized_applications/:id(.:format) doorkeeper/authorized_applications#destroy 

क्या मैं करना चाहता हूँ सर्वर में एक टोकन निरस्त कर है, इसलिए मुझे लगता है कि सेवा है कि मैं फोन करना चाहिए है "हटाएँ/अधिकृत करें" सही ? लेकिन मैं इस सेवाओं का उपभोग करने के लिए कई अलग-अलग तरीकों का प्रयास करता हूं और मुझे केवल त्रुटियों का सामना करना पड़ता है।

वैसे, मुझे नहीं पता कि सर्वर में टोकन को रद्द करने के लिए सही है या केवल इसे एप्लिकेशन से हटा दें?

पीएस: मैं अपने क्लाइंट के लिए आईओएस 7 में AFNetworking 2 का उपयोग कर रहा हूं।

+0

इस प्रश्न को फिर से वोट दिया। मेरा ग्राहक टोकन को भूल जाएगा और टोकन को कोई समस्या नहीं देगा। केवल सर्वर के पास अभी भी एक प्रमाणित उपयोगकर्ता है।जब ग्राहक फिर से प्रमाणीकृत करता है, तो वह उस उपयोगकर्ता को प्राप्त करता है। बहुत संभावना है कि यह कुछ है जो मैं सर्वर की तरफ गलत कर रहा हूं। फिर भी, ऐसा लगता है कि सर्वर को सूचित किया जाना चाहिए कि टोकन को अब सम्मानित नहीं किया जाना चाहिए। –

उत्तर

4

यह वास्तव में प्रश्न का उत्तर नहीं देता है, लेकिन संबंधित जानकारी प्रदान करता है।

मुझे यह समस्या थी जहां एक वैध उपयोगकर्ता/पासवर्ड संयोजन के लिए कोई पूर्व प्राधिकरण करने के बाद संसाधन मालिक पासवर्ड प्रमाण पत्र अनुदान अनुरोध पर डोरोकिपर किसी भी उपयोगकर्ता/पासवर्ड संयोजन को मान्य करेगा। परिदृश्य था:

  • ग्राहक मान्य उपयोगकर्ता नाम और पासवर्ड
  • ग्राहक फिर सेट करता है/भूल प्रमाणीकरण टोकन आदेश प्राधिकरण को समाप्त करने में उपयोग कर प्राधिकरण हो जाता है
  • ग्राहक किसी भी उपयोगकर्ता नाम और पासवर्ड का उपयोग कर एक नया प्राधिकरण प्राप्त कर सकते हैं, के लिए अधिकृत करता है मूल उपयोगकर्ता।

यह वार्डन को एक सत्र में अधिकृत उपयोगकर्ता को रखने के लिए निकला, और मेरा आईओएस क्लाइंट खुशी से मेरे लिए सत्र बनाए रखता है।

मैंने प्रमाणीकरण के बाद तुरंत वार्डन को साइन-आउट करके हल किया। यह काम करता है क्योंकि, एक अधिकृत अनुरोध पर, OAuth को प्राधिकरण टोकन के साथ संग्रहीत वर्तमान उपयोगकर्ता प्राप्त होता है। इसे सत्र में उपयोगकर्ता को रखने की आवश्यकता नहीं है।

निम्नलिखित कॉन्फ़िगर/प्रारंभकर्ता/doorkeeper.rb से है। प्राधिकरण के बाद अंतिम दो पंक्तियां साइन-आउट करती हैं।

# called for Resource Owner Password Credentials Grant 
    resource_owner_from_credentials do 
    request.params[:user] = {:email => request.params[:username], :password => request.params[:password]} 
    request.env["devise.allow_params_authentication"] = true 
    user = request.env["warden"].authenticate!(:scope => :user) 
    env['warden'].logout 
    user 
end 
+0

मुझे पूरा यकीन है कि इसे वार्डन को सत्र में प्रमाणित उपयोगकर्ता को _not_ स्टोर करने का निर्देश देकर तय किया जा सकता है। 'उपयोगकर्ता = request.env [" वार्डन "] को प्रमाणित।! (गुंजाइश: उपयोगकर्ता, दुकान: गलत)' देखें: https://github.com/doorkeeper-gem/doorkeeper/issues/475 # issuecomment-305517549 – stevenharman

0

अगर मैं तुम्हें सही ढंग से मिल मुद्दा 1) उपयोगकर्ता क्लाइंट अनुप्रयोग पर जाती है, 2) क्लाइंट अनुप्रयोग में OAuth-सर्वर से प्रमाणीकरण हो जाता है लोग इन है। उपयोगकर्ता को इस समय उपयोगकर्ता नाम/पासवर्ड के लिए कहा जाता है 3) उपयोगकर्ता क्लाइंट एप्लिकेशन 4 में लॉगआउट क्लिक करता है 4) उपयोगकर्ता क्लाइंट एप्लिकेशन में फिर से लॉगिन करता है, और यह स्वचालित रूप से उपयोगकर्ता नाम और पीडब्लू के लिए पूछने के बजाय पुराने प्रमाणीकृत टोकन का उपयोग करने पर उसे हस्ताक्षर करता है, जो आप चाहते हैं

यदि यह आपकी समस्या है, तो उसे कुकीज़ के साथ करना होगा। प्रत्येक अनुरोध में भेजे जा रहे कुकीज़ की जांच करें। मेरे मामले में, मैं एक लाइन

cookies.delete '_oauth_server_name_session'

जोड़ने के लिए था और यह तो काम किया। आप पुष्टि कर सकते हैं कि यह पहले कुकी समस्या है क्योंकि यदि आप ब्राउज़र स्विच करते हैं (या गुप्त मोड में जाते हैं) तो ऐसा नहीं होगा।