प्राधिकरण क्रेडेंशियल स्ट्रिप्ड - django, लोचदार beanstalk, oauth


79

मैंने django- रेस्ट-फ्रेमवर्क के साथ django में REST एपी को लागू किया और प्रमाणीकरण के लिए oauth2 का उपयोग किया।

मैंने इसके साथ परीक्षण किया:

curl -X POST -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD" http://localhost:8000/oauth2/access_token/

तथा

curl -H "Authorization: Bearer <your-access-token>" http://localhost:8000/api/

प्रलेखन के अनुरूप सफल परिणामों के साथ लोकलहोस्ट पर।

जब इसे मौजूदा AWS लोचदार बीनस्टॉक उदाहरण तक बढ़ा दिया गया, तो मुझे यह प्राप्त हुआ:

{ "detail" : "Authentication credentials were not provided." }

6
आप मेरे हीरो हैं। मैंने इस पर कई घंटे बर्बाद किए हैं, लेकिन मुझे यकीन है कि आपने मुझे कई और बचाया है!
स्टीवन

आपको अपने प्रश्न का उत्तर स्वयं देना चाहिए, इसलिए यह अनुत्तरित सूची में नहीं दिखता है :)

1
मुझे नहीं पता कि यह मेरा कितना समय खा गया होगा, लेकिन मुझे पूरा यकीन है कि इसे थोड़ी देर हो गई होगी। जीवन रक्षक।
टॉम मैन्टरफील्ड

फिर भी 2020 में घंटे और घंटे की बचत
काइल

आपने मेरा समय बचाया। मुझे नहीं पता कि मैं वास्तव में पूरी रात कितने दिनों तक रहा। हा ... बहुत बहुत धन्यवाद। आपका दिन शुभ हो, मैं वास्तव में आपसे प्यार करता हूं। अभी भी 2020 जुलाई में घंटे और घंटे की बचत !!!!!!!!!! lol
टिम

जवाबों:


30

मैं अब थोड़ा अलग दृष्टिकोण का उपयोग करता हूं। जब तक टॉम डिकिन ने बताया कि sahutchi के समाधान ने एनवी चर को नहीं बदला। मैंने EB के अंदर थोड़ा गहरा खोदा और पाया कि जहां wsgi.conf टेम्पलेट स्थित है और वहां "WSGIPassAuthorization On" विकल्प जोड़ा गया है।

commands:
  WSGIPassAuthorization:
    command: sed -i.bak '/WSGIScriptAlias/ a WSGIPassAuthorization On' config.py
    cwd: /opt/elasticbeanstalk/hooks

पर्यावरण चर बदलते हुए भी हमेशा काम करेगा। मुझे उम्मीद है कि आप इसे उपयोगी पाएँ।

संपादित करें: लगता है कि बहुत से लोग अभी भी इस प्रतिक्रिया को मार रहे हैं। मैंने थोड़ी देर में ElasticBeanstalk का उपयोग नहीं किया है, लेकिन मैं नीचे Manel Clos के समाधान का उपयोग करूंगा। मैंने इसे व्यक्तिगत रूप से आज़माया नहीं है, लेकिन बहुत अधिक क्लीनर समाधान लगता है। यह शाब्दिक रूप से ईबीएस स्क्रिप्ट पर एक हैक है और भविष्य में संभावित रूप से टूट सकता है यदि ईबी उन्हें अपडेट करता है, खासकर यदि वे उन्हें एक अलग स्थान पर ले जाते हैं।


यह अच्छा है। अब उस अस्सकबली के पास ईबे एसश है, मैंने देव-ऑप्स पर आलसी होना और हाथ से सफाई करना आसान पाया है।
साहूची १३'१५ को

3
अभी भी प्रासंगिक जवाब। जोड़ना चाहते थे (एक नौसिखिया aws उपयोगकर्ता के रूप में) आप बस अपने कंटेनर। शीर्ष पर अपने .ebextensions .config फ़ाइलों के लिए कमांड टैग जोड़ सकते हैं, और यह काम करेगा। उन सभी टैगों पर अधिक जो यहां संसाधित किए गए हैं: लिंक
सीन। हडसन

इसके साथ दो मुद्दे: 1) केवल दूसरे और बाद के डिप्लॉयज पर काम करता है, 2) हर बार आपके द्वारा पोस्ट किए गए कॉन्फिगर फाइल में उसी लाइन पर sed पाइलिंग रहता है। Manel Clos द्वारा समाधान (Apache's conf.d में एक नई फ़ाइल बनाते हुए) इन मुद्दों से ग्रस्त नहीं है, और यह तब भी काम करता है जब आप पर्यावरण चर बदलते हैं।
माइक प्लैसेंट्रा

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

आपने मेरी टीम के सप्ताहांत को बचा लिया। आपका बहुत बहुत धन्यवाद!
अतुल मिश्रा

63

मुझे मानक स्थान पर बस कुछ अतिरिक्त कॉन्फ़िगरेशन होने का विचार पसंद है। अपनी .ebextensions निर्देशिका में एक wsgi_custom.config फ़ाइल बनाएँ:

files:
  "/etc/httpd/conf.d/wsgihacks.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      WSGIPassAuthorization On

जैसा यहां पोस्ट किया गया है: https://forums.aws.amazon.com/message.jspa?messageID=376244


7
यह एक साफ समाधान है। जब आप पर्यावरण चर बदलते हैं तो यह काम करता है और यह हर बार आपके द्वारा तैनात किए गए कॉन्फ़िगरेशन फ़ाइल में एक ही पंक्ति नहीं जोड़ता है।
माइक प्लेसेंट्रा

यह त्रुटि प्राप्त करना:not authorized to perform: rds:DescribeDBEngineVersions
चिराग मालीवाल

34

मुझे लगा कि समस्या स्थानीय विन्यास और ईबी के बीच के अंतरों पर ध्यान केंद्रित करने के बजाय django या किसी अन्य त्रुटि प्रकार में मेरे कॉन्फ़िगरेशन के साथ थी। मुद्दा EB की अपाचे सेटिंग्स के साथ है।

WSGIPassAuthorization मूल रूप से OFF पर सेट है, इसलिए इसे चालू करना होगा। यह आपके * .config फ़ाइल में आपके .ebextensions फ़ोल्डर में किया जा सकता है, जो निम्न कमांड जोड़ा गया है:

container_commands:
  01_wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'

कृपया मुझे बताएं कि क्या मैंने कुछ याद किया है या यदि कोई बेहतर तरीका है तो मुझे समस्या को देखना चाहिए। मैं वेब पर कहीं भी इसके बारे में विशेष रूप से कुछ भी नहीं पा सका और सोचा कि इससे कुछ घंटों की समस्या से मुक्ति मिल सकती है और फिर मूर्खता महसूस होगी।


5
लगता है मैंने अपनी उपरोक्त टिप्पणी में बहुत जल्द ही बात की। जब भी यह आरंभिक परिनियोजन के लिए काम करता है, यदि आप अपने वातावरण में कुछ बदलते हैं (उदाहरण के लिए एक नया चर जोड़ते हैं), तो यह नहीं चलाया जाता है जब उन परिवर्तनों को लागू किया जाता है, और wsgi.conf अभी भी पुनर्जीवित लगता है। क्या आपको लगता है कि किसी भी एप्लिकेशन कॉन्फिग का पता नहीं चलता है जो हर बार एक बदलाव होता है?
टॉम मैन्टरफील्ड

मैं इसे हर git aws.push में शामिल करता हूं। लेकिन हाँ, मैं कभी-कभी सीएसएस खो देता हूं जब मैं पैरामीटर बदलता हूं। यदि आपके वातावरण में बदलाव करने के बाद आपके ऐप में कुछ भी टूट जाएगा तो आपने पर्यावरण में ui के माध्यम से अंतिम धक्का दिया - संस्करण संस्करण मेनू?
sahutchi

ऐसा लग रहा है कि यह फिक्स अब पुराना हो चुका है। रुबैन डुरे तारि के रनर अप जवाब काम करता है (यदि आप टाइपो को ठीक करते हैं) और इसके चेहरे पर लगता है कि यह अधिक मजबूत है।
स्कॉलसुपर

@skolsuper टाइपो क्या है?
नैट

1
@ नहीं वहाँ एक नहीं है। जब मैंने इसका परीक्षण किया, तो मुझे एक असंबंधित समस्या थी जिसे मैंने अनजाने में टाइपो को "सही" करने के रूप में तय किया था। रुबैन ने अपने जवाब को मेरी भैंस के बाद से एक कार्यशील स्थिति में संपादित किया है।
स्कॉलसुपर

0

हालांकि उपरोक्त समाधान दिलचस्प है, एक और तरीका है। Wsgi.conf VirtualHost कॉन्फ़िगरेशन फ़ाइल को आप .extxtensions में उपयोग करना चाहते हैं, और इसे पोस्ट परिनियोजन हुक में अधिलेखित करें (आप इसे पूर्व-नियत नहीं कर सकते क्योंकि यह फिर से उत्पन्न हो जाएगा (हाँ, मुझे यह पता चला है) रास्ता)। यदि आप ऐसा करते हैं, तो रिबूट करने के लिए, अपने सभी पर्यावरण चर को ठीक से सेट करने के लिए पर्यवेक्षक कार्यक्रम का उपयोग पुनः आरंभ करने के लिए सुनिश्चित करें। (मुझे यह कठिन तरीका भी समझ में आया।)

cp /tmp/wsgi.conf /etc/httpd/conf.d/wsgi.conf
 /usr/local/bin/supervisorctl -c /opt/python/etc/supervisord.conf restart httpd
exit 0

01_python.config:

05_fixwsgiauth:
    command: "cp .ebextensions/wsgi.conf /tmp"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.