मैं ब्राउज़र में ट्विटर एपीआई को कॉल करने के लिए 3-legged authorization करने की कोशिश कर रहा हूं। प्रक्रिया /oauth/request_token
पर हस्ताक्षरित अनुरोध पोस्ट करके अनुरोध टोकन प्राप्त करने के साथ शुरू होती है (यह भी sign in with Twitter शुरू होता है)।ट्विटर एपीआई प्राधिकरण ब्राउज़र में सीओआरएस प्रीफलाइट में विफल रहता है
मेरी समस्या यह है कि ब्राउज़र ट्विटर एपीआई एंडपॉइंट पर पोस्ट करने से पहले, यह एक विकल्प विधि के साथ preflight the request चाहता है। यह प्रीफलाइट अनुरोध हमेशा स्थिति 400 (खराब अनुरोध) लौटा रहा है।
यहाँ एक उदाहरण है कि आप को कट करके ब्राउज़र कंसोल लायें API का समर्थन करने में पेस्ट कर सकते हैं:
fetch('https://api.twitter.com/oauth/request_token', { method: 'POST', mode: 'cors', headers: new Headers({ authorization: 'xxx' }), body: 'oauth_callback=http%3A%2F%2Flocalhost%2F' });
Chrome पर, preflight अनुरोध इस तरह दिखता है (फ़ायरफ़ॉक्स समान है):
OPTIONS /oauth/request_token HTTP/1.1
accept:*/*
accept-encoding:gzip, deflate, sdch
accept-language:en-US,en;q=0.8
access-control-request-headers:authorization, content-type
access-control-request-method:POST
cache-control:no-cache
origin:null
pragma:no-cache
user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
HTTP/1.1 400 Bad Request
content-length: 0
date: Tue, 08 Mar 2016 22:21:37 GMT
server: tsa_a
x-connection-hash: 529e3d8338caeb980077637d86db5df1
कि समस्याओं के नोट:
और preflight प्रतिक्रिया इस तरह दिखता है मी है कि मैंने ऊपर दिए गए उदाहरण में वास्तविक प्राधिकरण शीर्षलेख निर्दिष्ट नहीं किया है। प्राधिकरण शीर्षलेख का मान प्रीफलाइट अनुरोध में उपयोग नहीं किया जाता है।
यदि मैं कंसोल पर अपने POST अनुरोध के घटकों को मुद्रित करता हूं और टुकड़ों को एक कर्ल कमांड (जो प्रीफलाइट नहीं करता) में इकट्ठा करता है तो मुझे टोकन का अनुरोध मिल सकता है। लेकिन अगर मैं कर्ल में preflight अनुरोध को दिखाने का प्रयास करते हैं, मुझे लगता है कि काम करने के लिए प्राप्त करने में सक्षम नहीं किया गया है:
$ curl -v -X OPTIONS -H "access-control-request-headers:authorization,content-type" -H "access-control-request-method:POST" -H "origin:http://example.com" https://api.twitter.com/oauth/request_token
* Trying 199.59.148.20...
* Connected to api.twitter.com (199.59.148.20) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /opt/local/share/curl/curl-ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2/ECDHE-ECDSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=US; ST=CA; L=San Francisco; O=Twitter, Inc.; OU=Twitter Security; CN=api.twitter.com
* start date: Aug 11 00:00:00 2015 GMT
* expire date: Aug 15 12:00:00 2016 GMT
* subjectAltName: api.twitter.com matched
* issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 High Assurance Server CA
* SSL certificate verify ok.
> OPTIONS /oauth/request_token HTTP/1.1
> Host: api.twitter.com
> User-Agent: curl/7.47.1
> Accept: */*
> access-control-request-headers:authorization,content-type
> access-control-request-method:POST
> origin:http://example.com
>
< HTTP/1.1 400 Bad Request
< content-length: 0
< date: Tue, 08 Mar 2016 23:06:44 GMT
< server: tsa_a
< x-connection-hash: 66174829ef6d3f5e5ec641ac080ad19c
<
* Connection #0 to host api.twitter.com left intact
क्या कर रहा हूँ मुझे याद आ रही है कि मुझे https://api.twitter.com/oauth/request_token के लिए एक सफल CORS preflight करने देंगे?
ओह वाह, मैं इसे एक साल बाद खिलौना ऐप के लिए पढ़ रहा हूं और अभी भी हल नहीं किया जा रहा है। इसे यहां विस्तारित करने के लिए धन्यवाद! – tsps
कोई कामकाज? – foobarbecue