2014-10-08 12 views
11

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

मैं प्राधिकरण पूरा हो जाने के बाद, वितरित करना चाहता हूं, प्रत्येक बाकी पर एक jwt टोकन को कॉल करें जिसे कुछ पथों के अनुरोधों को अधिकृत करने के लिए स्लिम के भीतर उपयोग किया जा सकता है।

अब मैं विश्राम के माध्यम से वितरित निम्नलिखित शीर्षक और शरीर:

Accept: */* 
Accept-Encoding: gzip, deflate 
Content-Type: application/json 
Authorization: jwt-test 
Accept-Language: de-de 

{ 
    "login": "TestLogin", 
    "password": "TestPassword", 
    "uuid": "dsfglj45690dfgkl456" 
} 

और सिर्फ बाहर पूरे हैडर प्रिंट:

Slim\Http\Headers Object ([data:protected] => Array ([Host] => localhost:8888 
[Content-Type] => application/json [Content-Length] => 89 [Connection] 
=> keep-alive [Accept] => */* [User-Agent] => Rested/2009 CFNetwork/673.4 
Darwin/13.4.0 (x86_64) (iMac13%2C2) [Accept-Language] => de-de [Accept-Encoding] 
=> gzip, deflate)) 

जैसा कि आप देख सकते हैं, वहाँ इस सरणी के भीतर कोई प्राधिकरण है ।

मैंने इसे सीधे फ़ायरफ़ॉक्स के साथ भी जांच लिया, वही परिणाम। ओ फ़ायरबग के साथ अनुरोध हेडर के भीतर प्राधिकरण स्ट्रिंग देख सकता है, लेकिन यह slimframework पर डंपेड सरणी में नहीं है।

क्या किसी के पास कोई संकेत है जहां मेरी समस्या झूठ है?

अग्रिम धन्यवाद और तरह का संबंध

solick

+0

आप लॉगिन हेडर कैसे जोड़ रहे हैं? जो आपने साझा किया वह अनुरोध निकाय की तरह दिखता है, हेडर नहीं। साथ ही, एक तरफ के रूप में, यह ** ** वास्तव में ** बुरा विचार है कि सादा पाठ में पासवर्ड भेजना चाहे, अनुरोध हेडर या अन्यथा। –

+0

नहीं, मैं बाद में jwt का उपयोग करूंगा, आईएसएसएस सिर्फ परीक्षण के लिए। मैं केवल हेडर को प्राधिकरण जोड़ता हूं, और नहीं। जैसा कि आप देख सकते हैं, यदि हेडर ऑब्जेक्ट स्लिम \ Http \ Headers – solick

+0

है तो कृपया एक कोड नमूना साझा करें जो दिखा रहा है कि आप उन शीर्षकों को कैसे सेट कर रहे हैं। हम आपको इस तरह से एक हाथ देने में सक्षम होंगे। –

उत्तर

22

समस्या

मूल प्रमाणीकरण हैडर कुछ इस तरह दिखना चाहिए।

Authorization: Basic cm9vdDp0MDBy 

स्ट्रिंग बेसिक के बाद username:password की तरह एक स्ट्रिंग में उपयोगकर्ता नाम और पासवर्ड के संयोजन द्वारा निर्मित किया गया है। परिणाम स्ट्रिंग को बेस 64 का उपयोग करके एन्कोड किया जाता है।

आप वेबसर्वर को हेडर भेज रहे हैं जो PHP पार्स नहीं करेगा। सुनिश्चित नहीं है कि यह बग या एक विशेषता माना जाता है।

Authorization: jwt-test 

समाधान

स्लिम के वर्तमान संस्करण के साथ करता है, तो आप फ़ाइल .htaccess के लिए निम्न जोड़ें।

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 

तब आप इनमें से किसी भी के साथ गैर मानक शीर्षलेख तक पहुंच सकते हैं।

string 'jwt-test' (length=8) 
string 'jwt-test' (length=8) 
string 'jwt-test' (length=8) 

आप भी इस तरह के X-Authorization रूप में कुछ अन्य शीर्ष लेख नाम इस्तेमाल कर सकते हैं:

var_dump($_SERVER["HTTP_AUTHORIZATION"]); 
var_dump(apache_request_headers()["Authorization"]); 
var_dump($app->request->headers("Authorization")); 

यह निम्न परिणाम देता है।

+0

हाय मिका, स्पष्टीकरण के लिए धन्यवाद। जहां तक ​​मैं आपको समझता हूं, अपाचे प्राधिकरण मान को स्वीकार करने के लिए एक विशेष प्रारूप की अपेक्षा करता है? क्या आप कुछ लिंक साझा कर सकते हैं जहां इसे परिभाषित किया गया है? मैंने config.headers के साथ अपने कोणीय जेएस अनुप्रयोग में कोशिश की। प्राधिकरण = 'बेयरर' + $ window.sessionStorage.tokenUUID; लेकिन जब भी मैं हेडर ऑब्जेक्ट को डंप करता हूं तब भी मैं प्राधिकरण फ़ील्ड नहीं देख सकता। – solick

+0

बेहतर कामकाज के साथ उत्तर अद्यतन किया गया। –

+0

धन्यवाद मिका। दुर्भाग्य से मुझे एक और परियोजना के कारण रोकना पड़ा। मुझे आशा है कि मैं अगले हफ्ते इस परियोजना में वापस लौट सकूंगा और आपके समाधान को लागू करने की कोशिश करूंगा। – solick

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