2012-01-31 10 views
28

के साथ कई symfony2 फायरवॉल मैं दो फायरवॉल है main फ़ायरवॉल। हालांकि, यह डेटा लाने के लिए api फ़ायरवॉल के तहत एंडपॉइंट्स के साथ बातचीत करता है। यहां समस्या यह है कि मैं दूसरी फ़ायरवॉल के खिलाफ प्रमाणीकरण के लिए उपयोगकर्ता को दूसरी बार लॉग इन नहीं करना चाहता हूं।प्रमाणित एक लॉगिन प्रपत्र

मैं केवल एक ही लॉगिन फ़ॉर्म के साथ फ़ायरवॉल दोनों के खिलाफ प्रमाणित कैसे कर सकता हूं?

उत्तर

59

शायद आप 'संदर्भ' फ़ायरवॉल संपत्ति को आजमा सकते हैं।

आप इस प्रकार का विन्यास कुछ है कहो (जो संभवतः आप करते हैं):

security: 
    // providers etc ... 

    firewall: 
     main: 
      pattern: # ... 
      provider: my_users 
      http_basic: ~ 
     api: 
      pattern: # ... 
      provider: my_users 
      http_basic: ~ 

इस मामले में उपयोगकर्ता के सत्र 'मुख्य' फ़ायरवॉल के खिलाफ के सत्यापन के बाद एक '_security_main' संपत्ति में शामिल होंगे, और उसके बाद जब वे 'एपीआई' स्थान तक पहुंचने का प्रयास करते हैं तो उन्हें फिर से लिखने के लिए कहा जाएगा और फिर '_security_api' सत्र संपत्ति प्राप्त होगी।

इस फिर से शीघ्र रोकने के लिए, आप प्रत्येक फ़ायरवॉल परिभाषा के 'संदर्भ' संपत्ति जोड़ सकते हैं आप एक ही प्रमाणीकरण साझा करना चाहते हैं - तो: 'मुख्य साथ,

security: 
    # providers etc ... 

    firewall: 
     main: 
      pattern: # ... 
      provider: my_users 
      http_basic: ~ 
      context: primary_auth # new 
     api: 
      pattern: # ... 
      provider: my_users 
      http_basic: ~ 
      context: primary_auth # new 

इस मामले में प्रमाणीकरण पर 'फ़ायरवॉल, एक' _security_primary_auth 'संपत्ति उपयोगकर्ता के सत्र में सेट की जाएगी। 'एपीआई' फ़ायरविल के अंदर किसी भी बाद के अनुरोध प्रमाणीकरण स्थिति स्थापित करने के लिए '_security_primary_auth' के मान का उपयोग करेंगे (और इसलिए उपयोगकर्ता प्रमाणीकृत दिखाई देगा)।

बेशक यह प्रमाणीकरण संदर्भ साझाकरण दोनों तरीकों से काम करेगा (चाहे वे पहले 'मुख्य' या 'एपीआई' फ़ायरवॉल के साथ पहले हों) - यदि आप केवल एक दिशा में संक्रमण चाहते थे, तो चीजें अधिक जटिल होंगी।

उम्मीद है कि इससे मदद मिलती है।

+1

शानदार! एक जादू की तरह काम करता है। – anushr

+1

अच्छा, मैं इसे लंबे समय से ढूंढ रहा था! – PMoubed

+1

मेरे पास बिल्कुल वही समस्या है, केवल अंतर "मुख्य" फ़ायरवॉल http_basic के बजाय लॉग इन फॉर्म का उपयोग करके प्रमाणित करता है, इसलिए, 'एपीआई' फ़ायरवॉल उपयोगकर्ता को लॉग इन फॉर्म के माध्यम से प्रमाणित होने पर भी फिर से लॉग इन करने के लिए संकेत देता है। क्या इसे काम करने का कोई तरीका है? – Xocoatzin

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