कई मापदंडों के साथ google oauth2 redirect_uri


120

Google oauth2 redirect_uri पर एक पैरामीटर कैसे जोड़ें?

बस इसी तरह redirect_uri=http://www.example.com/redirect.html?a=b

bके a=bयादृच्छिक है।

कोई मदद कर सकता है?

जवाबों:


235
  1. आप रीडायरेक्ट uri में कुछ भी नहीं जोड़ सकते हैं, Redirect uri निरंतर है जैसा कि Oauth की ऐप सेटिंग में सेट है। जैसे: http://www.example.com/redirect.html

  2. अपने रीडायरेक्ट uri में कई पैरामीटर पास करने के लिए, उन्हें state Oauth url पर कॉल करने से पहले पैरामीटर में संग्रहीत किया जाता है , प्राधिकरण के बाद का url आपके रीडायरेक्ट uri में समान पैरामीटर भेजेगा state=THE_STATE_PARAMETERS

तो आपके मामले के लिए, यह करें:

/ 1। अपने मापदंडों का एक जसन स्ट्रिंग बनाएं ->

{ "a" : "b" , "c" : 1 }

/ 2। URL सुरक्षित रखने के लिए, यह एक base64UrlEncode करें

stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');

यह बेस 64UrlEncoding और डिकोडिंग ( http://en.wikipedia.org/wiki/Base64#URL_applications ) का PHP उदाहरण है :

function base64UrlEncode($inputStr)
{
    return strtr(base64_encode($inputStr), '+/=', '-_,');
}

function base64UrlDecode($inputStr)
{
    return base64_decode(strtr($inputStr, '-_,', '+/='));
}

तो अब राज्य कुछ इस तरह होगा: StateString -> asawerwerwfgsg,

इस राज्य को OAuth प्राधिकरण URL में पास करें:

https://accounts.google.com/o/oauth2/auth?
  client_id=21302922996.apps.googleusercontent.com&
  redirect_uri=https://www.example.com/back&
  scope=https://www.google.com/m8/feeds/&
  response_type=token&
  state=asdafwswdwefwsdg,

सर्वर साइड फ्लो के लिए यह टोकन के साथ आएगा: http://www.example.com/redirect.html?token=sdfwerwqerqwer&state=asdafwswdwefwsdg ,

क्लाइंट साइड फ्लो के लिए यह हैश में टोकन के साथ आएगा: http://www.example.com/redirect.html#access_token=portyefghsdfgdfgsdgd&state=asdafwswdwefddg ,

स्थिति को फिर से प्राप्त करें, इसे आधार बनाएं, इसे भेजें, और आपके पास आपका डेटा है।

Google OAuth 2 के बारे में यहां और देखें:

http://code.google.com/apis/accounts/docs/OAuth2.html


बेस 64 का उपयोग डेटा को बाधित करने के साथ-साथ यूआरएल को एनकोड करने के लिए किया जाता है, अगर आपको अश्लीलता के माध्यम से अतिरिक्त 'सुरक्षा' की थोड़ी आवश्यकता होगी।
रिकोसिरेन्डम

@ ध्रुवपाठक सही, मुझे लिंकडिन एपीआई रीडायरेक्ट के साथ एक कस्टम पैरामीटर वापस भेजने की आवश्यकता थी और यह वही विधि है जिसका आपने वर्णन किया है।
एरिकनिक्स

5
OAuth प्रवाह के दौरान CSRF के हमलों को रोकने के लिए राज्य पैरामीटर का उपयोग किया जाता है। प्रवाह आरंभ करते समय आपको राज्य पैरामीटर में एक टोकन सेट करना होता है और जब आप अपने रीडायरेक्ट_यूरी के हिट होने पर राज्य के पैरामीटर में समान टोकन वापस प्राप्त करते हैं, तो आपको यह जांचना चाहिए। इस जवाब में क्या किया है मत करो। एक सत्र आधारित समाधान शायद वही है जो आपको देखना चाहिए।
रहीम

2
मैं stateयूआरआई को पुनर्निर्देशित करने और एक ही समय मेंCSRF हमले को रोकने के लिए कई मापदंडों को पारित करने के लिए परम का उपयोग कैसे कर सकता हूं ?
हेलबॉय

1
@ शेलबॉय मैं उसी बात को सोच रहा हूं। क्या आपने राज्य पैरामीटर (कस्टम मान और CSRFहमलों को रोकने ) में कई मापदंडों को जोड़ने का प्रबंधन किया था ?
केविन एटोर

4

यदि आप .NET में हैं तो आप सत्र में पैरामीटर को सहेज सकते हैं

HttpContext.Current.Session[{varname}]

और मापदंडों के बिना प्राधिकरण पृष्ठ पर पुनर्निर्देशित

Response.Redirect(your_uri_approved_with_no_querystring_parameters);

4
यह इस तरह के azure के रूप में एक webfarm का उपयोग करते समय पैमाने पर नहीं है।
खर्चा

3
@spender: तो आप का अर्थ है कि एक ही क्लाइंट से लगभग अनुक्रम में दो अनुरोध वेब सर्वर में अलग-अलग सर्वरों द्वारा नियंत्रित किए जा सकते हैं। यदि ऐसा है, तो यह केवल प्रभावित चीज नहीं है, मूल रूप से सत्र चर का उपयोग किसी भी चीज के लिए उस परिदृश्य में नहीं किया जा सकता है। BTW: मैं बहस नहीं कर रहा हूँ - वास्तव में यहाँ सीखने की कोशिश कर रहा हूँ।
रफू

6
यह पूरी तरह से संभव है, हां ... आप सत्र सर्वर के साथ सत्र को प्रबंधित करके या डेटाबेस से बैकिंग सत्र को देख कर इसे कम कर सकते हैं (देखें msdn.microsoft.com/en-us/library/ms178586.aspx ), या स्टिक सत्र सक्षम करने के लिए यह सुनिश्चित करने के लिए कि आपके ग्राहक हमेशा एक ही वेबसर्वर नोड पर वापस आते हैं। मेरे द्वारा बताए गए विकल्पों में से सभी एक पीआईटीए स्थापित करने के लिए हैं, इसलिए आईएमओ, किसी भी ग्राहक राज्य को संग्रहीत करने Sessionसे बचना चाहिए।
खर्चा

2

आप निम्न के रूप में यूआरएल के साथ पैरामीटर पुनर्निर्देशित कर सकते हैं,

जब आप Google से प्रतिक्रिया प्राप्त करते हैं, तो आप url के साथ पैरामीटर पास कर सकते हैं,

उसी के लिए नीचे php कोड देखें ,

if (isset($_GET['code'])) {
   $client->authenticate();
   $_SESSION['token'] = $client->getAccessToken();
   $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
   header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL) . '?r=page/view');

}

उपरोक्त उदाहरण में r = पृष्ठ / दृश्य पैरामीटर है जिस पर मैं पैरामीटर के साथ प्रतिक्रिया चाहता हूं


यह वह जगह है जहां राज्य पैरामीटर को Google द्वारा प्रदान की गई PHP कोड में भेजा जाता है। सर्वर अनुरोध किए गए तीन अनुरोध हैं। इसका अर्थ है कि अंतिम अनुरोध में कोई भी क्वेरी स्ट्रिंग चर नहीं होगा।
lol

एक जादू की तरह काम करता है! मुझे पता है कि हम राज्य में सूचना भेज सकते हैं, लेकिन अगर आवेदन किसी भी मूल्य के लिए अनुरोध परम के रूप में सीधे उम्मीद कर रहा है, तो यह विफल रहता है। आपके द्वारा प्रदान की गई विधि इस परिदृश्य के लिए एकदम सही है। धन्यवाद!
जयंत वार्ष्णेय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.