2011-07-19 11 views
20

मैंने अपने सिम्फनी 2 एप्लिकेशन के लिए एक आरईएसटी एपीआई विकसित की है। यह एपीआई मोबाइल ऐप द्वारा उपयोग किया जाएगा। कार्यक्षमता की ज्यादातर वर्तमान में प्रमाणित उपयोगकर्ता के संदर्भ में किया जाता है, अर्थात्:एक सिम्फनी 2 एपीआई के लिए प्रमाणीकरण (मोबाइल ऐप उपयोग के लिए)

$this->container->get('security.context')->getToken()->getUser() 

मैं आशा करती हूं कि मोबाइल एप्लिकेशन लॉगिन कार्रवाई सिर्फ एक पारंपरिक वेब रूप की तरह करने के लिए पोस्ट करने के लिए सक्षम हो जाएगा। यदि प्रमाण-पत्र जांचते हैं तो Symfony2 यह चीज करता है और एक कुकी सेट करता है (क्या यह एपीआई तक पहुंचने वाले मोबाइल ऐप के संदर्भ में भी काम करता है?)। उसके बाद उस मोबाइल फोन से एपीआई अनुरोध मूल रूप से देशी symfony2 security.context सेवा कंटेनर के साथ काम करेंगे (उम्मीद है)।

क्या यह काम करेगा? मोबाइल डेवलपर्स को एपीआई लेने से पहले मुझे इस प्राधिकरण प्रक्रिया को समझने की जरूरत है। यदि संभव हो तो मैं स्पष्ट रूप से xAuth या कुछ समान उपयोग करने वाले एपीआई के लिए एक नई ऑथ सिस्टम बनाने के बजाय मूल सुरक्षा। कॉन्टेक्स्ट सेवा का उपयोग करने में सक्षम होना चाहता हूं।

धन्यवाद

उत्तर

13

मुझे लगता है कि आप राज्यविहीन (कुकी के बिना) यह क्या करना चाहिए।

मैं एक ही समस्या थी, मैं क्या किया:

    अपने अनुप्रयोग/config/security.yml में
  • , जोड़ें:
 
security: 
    ... 
    firewalls: 
     rest_webservice: 
      pattern: /webservice/rest/.* 
      stateless: true 
      http_basic: 
       provider: provider_name 
    ... 
  • अब आप के लिए एक अनुरोध कर सकते हैं आपकी webservice:
class AuthTest extends WebTestCase 
{ 
    public function testAuthenticatedWithWebservice() 
    { 
     $client = $this->createClient(); 

     // not authenticated 
     $client->request('GET', '/webservice/rest/url'); 
     $this->assertEquals(401, $client->getResponse()->getStatusCode()); 

     // authenticated 
     $client->request('GET', '/webservice/rest/url', array(), array(), array(
      'PHP_AUTH_USER' => 'username', 
      'PHP_AUTH_PW' => 'password' 
     )); 
     $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
    } 
} 
+0

हम्म दिलचस्प। मुझे पूरा यकीन नहीं है कि मैं यहां सब कुछ का पालन करता हूं। क्या आप एक पूर्ण उदाहरण मामले से गुजर सकते हैं? यानी उपयोगकर्ता foo मोबाइल ऐप पर अपना उपयोगकर्ता नाम/पासवर्ड प्रदान करता है। ऐप में एपीआई के हर अनुरोध के साथ उपयोगकर्ता नाम और पासवर्ड शामिल है? सादे पाठ में? क्या यह सुरक्षित है? क्षमा करें अगर मैं यहाँ कुछ गलत समझ रहा हूँ! – Marc

+0

जैसा कि डोंडलरो ने कहा था कि आपको कुकीज़ अक्षम करनी है, इसलिए मैं सच में स्टेटलेस पैरामीटर जोड़ता हूं। Personnaly मुझे पच प्रमाणीकरण पसंद नहीं है क्योंकि इसे लागू करना बहुत मुश्किल है। एचटीपी मूल विधि आसान है और ठीक काम करता है। प्रत्येक अनुरोध में उपयोगकर्ता नाम और पासवर्ड दिखाई दे रहे हैं। आपको एक एसएसएल प्रमाणपत्र का उपयोग करना होगा। – julesbou

+0

अजीब, मैं अभी भी 'स्टेटलेस: सत्य 'सेट करने के बाद भी' सेट-कुकी 'शीर्षलेख प्राप्त कर रहा हूं। कोई विचार क्यों ऐसा हो सकता है? –

3

हां मार्क, जूल्स आपको एक उदाहरण के लिए इंगित कर रहा है कि आपको http_basic के साथ प्रमाणीकरण का परीक्षण कैसे किया जाए।

रीस्टफुल होने के लिए आपको कुकीज़ का उपयोग करने से बचना चाहिए, अन्यथा इसे केवल एक एपीआई कहें। आपके प्रमाणीकरण प्रणाली के बारे में कितना सुरक्षित है आप https_digest से https पर जा सकते हैं या api_key/api_secret दृष्टिकोण के साथ अधिक सुरक्षित हस्ताक्षरित अनुरोध के साथ जा सकते हैं।

एक नज़र यहाँ http://wiki.zanox.com/en/RESTful_API_authentication

5

यहाँ आप कर रहे हैं, How to create a custom Authentication Provider भयानक लेख है।

एपीआई के माध्यम से एक Symfony2 आवेदन करने के लिए प्रमाणीकरण करने के लिए, आप का उपयोग की जरूरत है: WS-Security

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