গুগল oauth2 redirect_uri বেশ কয়েকটি পরামিতি সহ


120

গুগল oauth2 redirect_uri এ কীভাবে কোনও পরামিতি যুক্ত করবেন?

ঠিক এই মত redirect_uri=http://www.example.com/redirect.html?a=b

bএর a=bএলোমেলো হয়ে যায়।

কেউ সাহায্য করতে পারেন?

উত্তর:


235
  1. রিডাইরেক্ট ইউরিতে আপনি কিছু যোগ করতে পারবেন না, ওআউথের অ্যাপ্লিকেশন সেটিংগুলিতে সেট করা ইউটি রিডাইরেক্ট ইউরি ধ্রুবক। যেমন: http://www.example.com/redirect.html

  2. আপনার পুনঃনির্দেশিত ইউরিতে কয়েকটি প্যারামিটারগুলি পাস করার জন্য, state ওউথ ইউআরএল কল করার আগে সেগুলি প্যারামিটারে সংরক্ষণ করুন , অনুমোদনের পরে ইউআরএল একই প্যারামিটারগুলি আপনার পুনঃনির্দেশিত ইউরিতে প্রেরণ করবে state=THE_STATE_PARAMETERS

সুতরাং আপনার ক্ষেত্রে, এটি করুন:

/ 1। আপনার পরামিতিগুলির একটি জেসন স্ট্রিং তৈরি করুন ->

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

/ 2। এটিকে ইউআরএল সুরক্ষিত করতে -> একটি বেস 64 ইউরাল এনকোড করুন

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

এটি বেস 64৪ ইউরাল এনকোডিং এবং ডিকোডিংয়ের একটি পিএইচপি উদাহরণ ( http://en.wikedia.org/wiki/Base64#URL_applications ):

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

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

সুতরাং এখন রাষ্ট্রটি এমন কিছু হবে: স্টেট স্ট্রিং -> অ্যাসওয়ারওয়্যারফেসসজি,

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=asdafwswdwefwsdg ,

রাজ্যটি পুনরুদ্ধার করুন, বেস 64 ইউরোপ ডিকোড এটি করুন, জসন_ডেকোড করুন এবং আপনার ডেটা রয়েছে।

গুগল OAuth 2 সম্পর্কে আরও এখানে দেখুন:

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


বেস 64 তথ্য উপাত্তর সাথে সাথে ইউআরএল এনকোড করার জন্য ব্যবহৃত হয়, যদি আপনার অস্পষ্টতার মাধ্যমে কিছুটা অতিরিক্ত 'সুরক্ষা' দরকার হয়।
রিকোসরম

@ ধ্রুবপাঠক নিখুঁত, আমার লিঙ্কডিন এপিআই পুনঃনির্দেশ সহ একটি কাস্টম প্যারামিটার পাঠাতে হবে এবং আপনি বর্ণিত একই পদ্ধতি।
এরিক্সিকন

5
OAuth প্রবাহ চলাকালীন সিএসআরএফ আক্রমণ রোধ করতে স্টেট প্যারামিটার ব্যবহার করা হয়। প্রবাহ শুরু করার সময় আপনাকে রাষ্ট্রের প্যারামিটারে একটি টোকেন সেট করতে হবে এবং আপনার redirect_uri আঘাতের পরে আপনি যদি রাষ্ট্র প্যারামিটারে একই টোকেনটি ফিরে পান কিনা তা পরীক্ষা করে দেখতে হবে। এই উত্তরে যা করা হয় তা করবেন না। একটি সেশন ভিত্তিক সমাধান সম্ভবত আপনার যা দেখা উচিত is
রহিম

2
stateইউরি পুনর্নির্দেশের জন্য এবং একই সাথেCSRF আক্রমণ প্রতিরোধ করতে আমি কীভাবে প্যারাম ব্যবহার করতে পারি ?
Hellboy

1
@ হেলবয় আমি একই জিনিসটি অবাক করছি। আপনি কি রাষ্ট্রীয় পরম (কাস্টম মান এবং CSRFআক্রমণগুলি প্রতিরোধ ) -এ বেশ কয়েকটি পরামিতি যুক্ত করার ব্যবস্থা করেছিলেন ?
কেভিন ইটোর

4

আপনি। নেট এ থাকলে আপনি সেশনে প্যারামিটারগুলি সংরক্ষণ করতে পারেন

HttpContext.Current.Session[{varname}]

এবং পরামিতি ছাড়াই অনুমোদনের পৃষ্ঠায় পুনর্নির্দেশ করুন

Response.Redirect(your_uri_approved_with_no_querystring_parameters);

4
অ্যাজুরের মতো ওয়েবফর্ম ব্যবহার করার সময় এটি স্কেল হয় না।
ব্যয়কারী

3
@ স্পেন্ডার: সুতরাং আপনি বোঝাচ্ছেন যে একই ক্লায়েন্টের প্রায় ক্রম অনুসারে দুটি অনুরোধগুলি ওয়েবফর্মের বিভিন্ন সার্ভার দ্বারা পরিচালিত হতে পারে। যদি এটি হয় তবে এটি কেবল প্রভাবিত নয়, মূলত সেশন ভেরিয়েবলটি সেই দৃশ্যে কোনও কিছুর জন্য ব্যবহার করা যায়নি। বিটিডাব্লু: আমি তর্ক করছি না - আসলে এখানে শেখার চেষ্টা করছি।
rufo

6
এটি পুরোপুরি সম্ভব, হ্যাঁ ... আপনি একটি সেশন সার্ভারের মাধ্যমে সেশন পরিচালনা করে বা ডেটাবেসটিতে সেশন ব্যাক করে ( এমএসডিএন.মাইক্রোসফট.ফেন / লিবারি / এমস 178586.aspx দেখুন ) বা স্টিকি সেশনগুলি সক্ষম করার মাধ্যমে এটি প্রশমিত করতে পারেন You আপনার লোড-ব্যালেন্সারে তা নিশ্চিত করতে ক্লায়েন্টরা সর্বদা একই ওয়েবসারভার নোডে ফিরে আসে। আমি উল্লিখিত সমস্ত অপশন হ'ল একটি পিআইটিএ সেটআপ করার জন্য, তাই আইএমও, কোনও ক্লায়েন্টের রাজ্যের Sessionস্টোর করা এড়ানো উচিত।
ব্যয়কারী

2

আপনি নীচের মতো url দিয়ে প্যারামিটার পুনঃনির্দেশ করতে পারেন,

আপনি যখন ইউআরএল দিয়ে প্যারামিটারটি পাস করার চেয়ে Google এর কাছ থেকে প্রতিক্রিয়া পান,

একই জন্য পিএইচপি কোড নীচে দেখুন ,

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 = পৃষ্ঠা / ভিউ হল প্যারামিটার যা আমি প্যারামিটারের সাথে প্রতিক্রিয়া চাই


গুগল সরবরাহিত পিএইচপি কোডে রাজ্যের প্যারামিটারটি এখানে পাঠানো হয়। সার্ভারের তিনটি অনুরোধ করা হয়েছে। এর অর্থ এই যে চূড়ান্ত অনুরোধে কোনও জিজ্ঞাসার স্ট্রিং ভেরিয়েবল থাকবে না।
লোল

একটি যাদুমন্ত্র মত কাজ করে! আমি জানি আমরা রাষ্ট্রীয় পরম তথ্য প্রেরণ করতে পারি তবে যদি আবেদনটি অনুরোধের পরম হিসাবে সরাসরি কোনও মান প্রত্যাশা করে, তবে এটি ব্যর্থ হয়। আপনি যে পদ্ধতিটি সরবরাহ করেছেন তা এই দৃশ্যের জন্য উপযুক্ত। ধন্যবাদ!
জয়ন্ত ভার্শনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.