লুপব্যাক আইপি অ্যাড্রেস ফ্লো মাইগ্রেশন গাইড

ওভারভিউ

16 ফেব্রুয়ারি 2022-এ, আমরা আরও নিরাপদ OAuth ফ্লো ব্যবহার করে Google OAuth ইন্টারঅ্যাকশনকে আরও নিরাপদ করার পরিকল্পনা ঘোষণা করেছি । এই নির্দেশিকা আপনাকে লুপব্যাক আইপি ঠিকানা প্রবাহ থেকে সমর্থিত বিকল্পগুলিতে সফলভাবে স্থানান্তরিত করার প্রয়োজনীয় পরিবর্তন এবং পদক্ষেপগুলি বুঝতে সাহায্য করে৷

এই প্রচেষ্টাটি Google-এর OAuth 2.0 অনুমোদনের শেষ পয়েন্টগুলির সাথে ইন্টারঅ্যাকশনের সময় ফিশিং এবং অ্যাপ ছদ্মবেশী আক্রমণের বিরুদ্ধে একটি সুরক্ষামূলক ব্যবস্থা৷

লুপব্যাক আইপি ঠিকানা প্রবাহ কি?

লুপব্যাক আইপি অ্যাড্রেস ফ্লো লুপব্যাক আইপি অ্যাড্রেস বা localhost রিডাইরেক্ট ইউআরআই-এর হোস্ট কম্পোনেন্ট হিসেবে ব্যবহার করতে সহায়তা করে যেখানে ব্যবহারকারীর একটি OAuth সম্মতি অনুরোধ অনুমোদন করার পর ক্রেডেনশিয়াল পাঠানো হয়। এই প্রবাহ মধ্যম আক্রমণে মানুষের জন্য ঝুঁকিপূর্ণ যেখানে কিছু অপারেটিং সিস্টেমে একই লুপব্যাক ইন্টারফেস অ্যাক্সেস করে একটি খারাপ অ্যাপ প্রদত্ত রিডাইরেক্ট ইউআরআই-তে অনুমোদন সার্ভার থেকে প্রতিক্রিয়া আটকাতে পারে এবং অনুমোদন কোডে অ্যাক্সেস পেতে পারে।

লুপব্যাক আইপি অ্যাড্রেস ফ্লো নেটিভ iOS, Android এবং Chrome OAuth ক্লায়েন্টের ধরনগুলির জন্য বাতিল করা হচ্ছে কিন্তু ডেস্কটপ অ্যাপগুলিতে সমর্থিত হতে থাকবে।

মূল সম্মতির তারিখ

  • মার্চ 14, 2022 - নতুন OAuth ক্লায়েন্টদের লুপব্যাক আইপি অ্যাড্রেস ফ্লো ব্যবহার করা থেকে ব্লক করা হয়েছে
  • আগস্ট 1, 2022 - একটি ব্যবহারকারী-মুখী সতর্কতা বার্তা অ-সম্মত OAuth অনুরোধগুলিতে প্রদর্শিত হতে পারে
  • আগস্ট 31, 2022 - 14 মার্চ, 2022-এর আগে তৈরি করা নেটিভ অ্যান্ড্রয়েড, ক্রোম অ্যাপ এবং iOS OAuth ক্লায়েন্টদের জন্য লুপব্যাক আইপি অ্যাড্রেস ফ্লো ব্লক করা হয়েছে
  • অক্টোবর 21, 2022 - সমস্ত বিদ্যমান ক্লায়েন্ট ব্লক করা হয়েছে (ছাড় দেওয়া ক্লায়েন্ট সহ)

একটি ব্যবহারকারী-মুখী ত্রুটি বার্তা অ-সম্মতি অনুরোধের জন্য প্রদর্শিত হবে. Google API কনসোলে OAuth সম্মতি স্ক্রিনে আপনি যে সমর্থন ইমেলটি নিবন্ধিত করেছেন সেটি প্রদর্শন করার সময় বার্তাটি ব্যবহারকারীদের জানিয়ে দেবে যে অ্যাপটি ব্লক করা হয়েছে।

মাইগ্রেশন প্রক্রিয়াটি সম্পন্ন করতে দুটি প্রধান ধাপ রয়েছে:
  1. আপনি প্রভাবিত হলে নির্ধারণ করুন.
  2. আপনি প্রভাবিত হলে একটি সমর্থিত বিকল্প মাইগ্রেট করুন.

আপনি প্রভাবিত হলে নির্ধারণ করুন

আপনার OAuth ক্লায়েন্ট আইডি প্রকার পর্যালোচনা করুন

Credentials page এর Google API Console এ নেভিগেট করুন এবং OAuth 2.0 ক্লায়েন্ট আইডি বিভাগের অধীনে আপনার OAuth ক্লায়েন্ট আইডি টাইপ দেখুন। এটি নিম্নলিখিতগুলির যে কোনও একটি হবে: ওয়েব অ্যাপ্লিকেশন , অ্যান্ড্রয়েড , আইওএস , ইউনিভার্সাল উইন্ডোজ প্ল্যাটফর্ম (ইউডব্লিউপি) , ক্রোম অ্যাপ , টিভি এবং লিমিটেড ইনপুট ডিভাইস , ডেস্কটপ অ্যাপ

আপনার ক্লায়েন্টের ধরন যদি Android, Chrome অ্যাপ বা iOS হয় এবং আপনি লুপব্যাক আইপি অ্যাড্রেস ফ্লো ব্যবহার করছেন তাহলে পরবর্তী ধাপে এগিয়ে যান।

আপনি যদি কোনো ডেস্কটপ অ্যাপ OAuth ক্লায়েন্টে লুপব্যাক আইপি অ্যাড্রেস ফ্লো ব্যবহার করেন তাহলে এই অবচয় সম্পর্কিত কিছু করার দরকার নেই কারণ সেই OAuth ক্লায়েন্ট প্রকারের সাথে ব্যবহার সমর্থিত হতে থাকবে।

আপনার অ্যাপ লুপব্যাক আইপি অ্যাড্রেস ফ্লো ব্যবহার করছে কিনা তা কীভাবে নির্ধারণ করবেন

আপনার অ্যাপটি লুপব্যাক রিডাইরেক্ট ইউআরআই মান ব্যবহার করছে কিনা তা নির্ধারণ করতে আপনার অ্যাপ কোড বা আউটগোয়িং নেটওয়ার্ক কল (যদি আপনার অ্যাপ একটি OAuth লাইব্রেরি ব্যবহার করছে) পরীক্ষা করুন।

আপনার আবেদন কোড পরিদর্শন করুন

আপনার অ্যাপ্লিকেশন কোডের বিভাগটি পর্যালোচনা করুন যেখানে আপনি Google OAuth অনুমোদনের শেষ পয়েন্টে কল করছেন এবং redirect_uri প্যারামিটারে নিম্নলিখিত মানগুলির মধ্যে কোনটি আছে কিনা তা নির্ধারণ করুন:
  • redirect_uri=http://127.0.0.1: <port> যেমন redirect_uri=http://127.0.0.1: 3000
  • redirect_uri=http://[::1]: <port> যেমন redirect_uri=http://[::1]: 3000
  • redirect_uri=http://localhost: <port> যেমন redirect_uri=http://localhost: 3000
একটি নমুনা লুপব্যাক আইপি ঠিকানা পুনঃনির্দেশিত প্রবাহ অনুরোধ নীচের মত দেখাবে:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

আউটগোয়িং নেটওয়ার্ক কল পরিদর্শন করুন

নেটওয়ার্ক কল পরিদর্শন করার পদ্ধতি আপনার অ্যাপ্লিকেশন ক্লায়েন্ট প্রকারের উপর নির্ভর করে পরিবর্তিত হবে।
নেটওয়ার্ক কলগুলি পরিদর্শন করার সময়, Google OAuth অনুমোদনের এন্ডপয়েন্টগুলিতে পাঠানো অনুরোধগুলি দেখুন এবং redirect_uri প্যারামিটারে নিম্নলিখিত মানগুলির মধ্যে কোনটি আছে কিনা তা নির্ধারণ করুন:
  • redirect_uri=http://127.0.0.1: <port> যেমন redirect_uri=http://127.0.0.1: 3000
  • redirect_uri=http://[::1]: <port> যেমন redirect_uri=http://[::1]: 3000
  • redirect_uri=http://localhost: <port> যেমন redirect_uri=http://localhost: 3000
একটি নমুনা লুপব্যাক আইপি ঠিকানা পুনঃনির্দেশিত প্রবাহ অনুরোধ নীচের মত দেখাবে:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

একটি সমর্থিত বিকল্প স্থানান্তর করুন

মোবাইল ক্লায়েন্ট (Android / iOS)

আপনি যদি নির্ধারণ করেন যে আপনার অ্যাপটি একটি Android বা iOS OAuth ক্লায়েন্ট টাইপের সাথে লুপব্যাক আইপি অ্যাড্রেস ফ্লো ব্যবহার করছে, তাহলে আপনাকে আমাদের Google সাইন-ইন মোবাইল SDKs ( Android , iOS ) ব্যবহার করে মাইগ্রেট করা উচিত।

SDK Google APIs অ্যাক্সেস করা সহজ করে এবং Google এর OAuth 2.0 অনুমোদনের শেষ পয়েন্টে সমস্ত কল পরিচালনা করে৷

লুপব্যাক আইপি অ্যাড্রেস রিডাইরেক্ট ইউআরআই ব্যবহার না করেই গুগল এপিআই অ্যাক্সেস করতে কীভাবে Google সাইন-ইন SDK ব্যবহার করতে হয় সে সম্পর্কে নীচের ডকুমেন্টেশন লিঙ্কগুলি তথ্য প্রদান করে।

অ্যান্ড্রয়েডে Google API অ্যাক্সেস করুন

সার্ভার-সাইড (অফলাইন) অ্যাক্সেস
নীচের উদাহরণটি দেখায় কিভাবে Android এ সার্ভার সাইডে Google API গুলি অ্যাক্সেস করতে হয়
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
  GoogleSignInAccount account = task.getResult(ApiException.class);
  
  // request a one-time authorization code that your server exchanges for an
  // access token and sometimes refresh token
  String authCode = account.getServerAuthCode();
  
  // Show signed-in UI
  updateUI(account);

  // TODO(developer): send code to server and exchange for access/refresh/ID tokens
} catch (ApiException e) {
  Log.w(TAG, "Sign-in failed", e);
  updateUI(null);
}

সার্ভার সাইড থেকে কিভাবে Google API গুলি অ্যাক্সেস করতে হয় সে সম্পর্কে সার্ভার-সাইড অ্যাক্সেস গাইড পর্যালোচনা করুন৷

একটি iOS অ্যাপে Google API অ্যাক্সেস করুন

ক্লায়েন্ট-সাইড অ্যাক্সেস

নীচের উদাহরণটি দেখায় কিভাবে iOS এ ক্লায়েন্ট সাইডে Google API গুলি অ্যাক্সেস করতে হয়

user.authentication.do { authentication, error in
  guard error == nil else { return }
  guard let authentication = authentication else { return }
  
  // Get the access token to attach it to a REST or gRPC request.
  let accessToken = authentication.accessToken
  
  // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
  // use with GTMAppAuth and the Google APIs client library.
  let authorizer = authentication.fetcherAuthorizer()
}

API কল করতে অ্যাক্সেস টোকেন ব্যবহার করুন, হয় একটি REST বা gRPC অনুরোধের শিরোনামে অ্যাক্সেস টোকেন অন্তর্ভুক্ত করে ( Authorization: Bearer ACCESS_TOKEN ), অথবা উদ্দেশ্য-C-এর জন্য Google API-এর ক্লায়েন্ট লাইব্রেরির সাথে ফেচার অথরাইজার ( GTMFetcherAuthorizationProtocol ) ব্যবহার করে বিশ্রামের জন্য

ক্লায়েন্ট সাইডে Google API গুলি কীভাবে অ্যাক্সেস করতে হয় সে সম্পর্কে ক্লায়েন্ট-সাইড অ্যাক্সেস গাইডটি পর্যালোচনা করুন। কিভাবে ক্লায়েন্ট সাইডে Google APIs অ্যাক্সেস করতে হয়।

সার্ভার-সাইড (অফলাইন) অ্যাক্সেস
একটি iOS ক্লায়েন্ট সমর্থন করার জন্য সার্ভার সাইডে Google API গুলি কীভাবে অ্যাক্সেস করবেন তা নীচের উদাহরণটি দেখায়৷
GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
  guard error == nil else { return }
  guard let user = user else { return }
  
  // request a one-time authorization code that your server exchanges for
  // an access token and refresh token
  let authCode = user.serverAuthCode
}

সার্ভার সাইড থেকে কিভাবে Google API গুলি অ্যাক্সেস করতে হয় সে সম্পর্কে সার্ভার-সাইড অ্যাক্সেস গাইড পর্যালোচনা করুন৷

ক্রোম অ্যাপ ক্লায়েন্ট

আপনি যদি নির্ধারণ করেন যে আপনার অ্যাপটি Chrome অ্যাপ ক্লায়েন্টে লুপব্যাক আইপি অ্যাড্রেস ফ্লো ব্যবহার করছে, তাহলে আপনাকে Chrome আইডেন্টিটি API ব্যবহার করে মাইগ্রেট করা উচিত।

লুপব্যাক আইপি অ্যাড্রেস রিডাইরেক্ট ইউআরআই ব্যবহার না করে কীভাবে সমস্ত ব্যবহারকারীর পরিচিতি পেতে হয় তা নীচের উদাহরণটি দেখায়।

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {

  
  // retrieve access token
  chrome.identity.getAuthToken({interactive: true}, function(token) {
  
  // ..........


  // the example below shows how to use a retrieved access token with an appropriate scope
  // to call the Google People API contactGroups.get endpoint

  fetch(
    'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY',
    init)
    .then((response) => response.json())
    .then(function(data) {
      console.log(data)
    });
   });
 });
};

কিভাবে প্রমাণীকরণ ব্যবহারকারীদের অ্যাক্সেস করতে হয় এবং Chrome আইডেন্টিটি API দিয়ে Google এন্ডপয়েন্টে কল করতে হয় সে সম্পর্কে আরও তথ্যের জন্য Chrome Identity API গাইডটি পর্যালোচনা করুন।