আউট-অফ-ব্যান্ড (OOB) ফ্লো মাইগ্রেশন গাইড

ওভারভিউ

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

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

OOB কি?

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

OOB ফ্লো সব ধরনের ক্লায়েন্ট যেমন ওয়েব অ্যাপ্লিকেশন, অ্যান্ড্রয়েড, iOS, ইউনিভার্সাল উইন্ডোজ প্ল্যাটফর্ম (UWP), ক্রোম অ্যাপস, টিভি এবং সীমিত-ইনপুট ডিভাইস, ডেস্কটপ অ্যাপের জন্য বাতিল করা হচ্ছে।

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

  • ফেব্রুয়ারী 28, 2022 - OOB প্রবাহের জন্য নতুন OAuth ব্যবহার ব্লক করা হয়েছে
  • সেপ্টেম্বর 5, 2022 - একটি ব্যবহারকারী-মুখী সতর্কতা বার্তা অ-সম্মত OAuth অনুরোধগুলিতে প্রদর্শিত হতে পারে
  • 3 অক্টোবর, 2022 - 28 ফেব্রুয়ারি, 2022-এর আগে তৈরি করা OAuth ক্লায়েন্টদের জন্য OOB ফ্লো বাতিল করা হয়েছে
  • 31 জানুয়ারী, 2023 - সমস্ত বিদ্যমান ক্লায়েন্ট ব্লক করা হয়েছে (ছাড় প্রাপ্ত ক্লায়েন্ট সহ)

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

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

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

এই অবচয় শুধুমাত্র প্রোডাকশন অ্যাপের ক্ষেত্রে প্রযোজ্য (অর্থাৎ প্রোডাকশনে সেট করা প্রকাশনা স্ট্যাটাস সহ অ্যাপ। ফ্লো টেস্টিং পাবলিশিং স্ট্যাটাস সহ অ্যাপগুলির জন্য কাজ করতে থাকবে।

l10n- Google API Console এর OAuth Consent Screen pageএ আপনার প্রকাশনার স্থিতি পর্যালোচনা করুন এবং আপনি যদি "ইন প্রোডাকশন" প্রকাশনা স্ট্যাটাস সহ একটি প্রকল্পে OOB ফ্লো ব্যবহার করেন তবে পরবর্তী ধাপে যান৷

আপনার অ্যাপটি OOB ফ্লো ব্যবহার করছে কিনা তা কীভাবে নির্ধারণ করবেন

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

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

আপনার অ্যাপ্লিকেশন কোডের বিভাগটি পর্যালোচনা করুন যেখানে আপনি Google OAuth অনুমোদনের শেষ পয়েন্টে কল করছেন এবং redirect_uri প্যারামিটারে নিম্নলিখিত মানগুলির মধ্যে কোনটি আছে কিনা তা নির্ধারণ করুন:
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
  • redirect_uri=oob
একটি নমুনা OOB রিডাইরেক্ট ফ্লো অনুরোধ নীচের মত দেখাবে:
https://accounts.google.com/o/oauth2/v2/auth?
response_type=code&
scope=<SCOPES>&
state=<STATE>&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
client_id=<CLIENT_ID>

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

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

নিরাপদ বিকল্পে স্থানান্তর করুন

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

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

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

নিচের ডকুমেন্টেশন লিঙ্কগুলি OOB রিডাইরেক্ট URI ব্যবহার না করে Google API অ্যাক্সেস করতে কীভাবে 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 অ্যাপ ক্লায়েন্টে OOB ফ্লো ব্যবহার করছে, তাহলে আপনাকে Chrome Identity API ব্যবহার করে মাইগ্রেট করা উচিত।

নীচের উদাহরণটি দেখায় কিভাবে একটি OOB পুনঃনির্দেশ URI ব্যবহার না করে সমস্ত ব্যবহারকারীর পরিচিতি পেতে হয়।

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 গাইডটি পর্যালোচনা করুন।

ওয়েব অ্যাপ্লিকেশন

আপনি যদি নির্ধারণ করেন যে আপনার অ্যাপটি একটি ওয়েব অ্যাপ্লিকেশনের জন্য OOB ফ্লো ব্যবহার করছে, তাহলে আপনাকে আমাদের Google API ক্লায়েন্ট লাইব্রেরিগুলির একটিতে স্থানান্তরিত করতে হবে। বিভিন্ন প্রোগ্রামিং ভাষার জন্য ক্লায়েন্ট লাইব্রেরি এখানে তালিকাভুক্ত করা হয়েছে।

লাইব্রেরিগুলি Google API গুলি অ্যাক্সেস করা এবং Google এন্ডপয়েন্টে সমস্ত কল পরিচালনা করা সহজ করে তোলে৷

সার্ভার-সাইড (অফলাইন) অ্যাক্সেস
সার্ভার-সাইড (অফলাইন) অ্যাক্সেস মোডের জন্য আপনাকে নিম্নলিখিতগুলি করতে হবে:
  • একটি সার্ভার দাঁড় করান এবং অনুমোদন কোড পাওয়ার জন্য একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য এন্ডপয়েন্ট (রিডাইরেক্ট ইউআরআই) সংজ্ঞায়িত করুন।
  • l10n Google API Console Credentials pageরিডাইরেক্ট URI কনফিগার করুন

নিচের কোড স্নিপেটটি OOB রিডাইরেক্ট URI ব্যবহার না করে সার্ভার-সাইডে ব্যবহারকারীর Google ড্রাইভ ফাইল তালিকাভুক্ত করতে Google Drive API ব্যবহার করার একটি NodeJS উদাহরণ দেখায়।

async function main() {
  const server = http.createServer(async function (req, res) {

  if (req.url.startsWith('/oauth2callback')) {
    let q = url.parse(req.url, true).query;

    if (q.error) {
      console.log('Error:' + q.error);
    } else {
      
      // Get access and refresh tokens (if access_type is offline)
      let { tokens } = await oauth2Client.getToken(q.code);
      oauth2Client.setCredentials(tokens);

      // Example of using Google Drive API to list filenames in user's Drive.
      const drive = google.drive('v3');
      drive.files.list({
        auth: oauth2Client,
        pageSize: 10,
        fields: 'nextPageToken, files(id, name)',
      }, (err1, res1) => {
        // TODO(developer): Handle response / error.
      });
    }
  }
}

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

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

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


// initTokenClient() initializes a new token client with your
// web app's client ID and the scope you need access to

const client = google.accounts.oauth2.initTokenClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  
  // callback function to handle the token response
  callback: (tokenResponse) => {
    if (tokenResponse && tokenResponse.access_token) { 
      gapi.client.setApiKey('YOUR_API_KEY');
      gapi.client.load('calendar', 'v3', listUpcomingEvents);
    }
  },
});

function listUpcomingEvents() {
  gapi.client.calendar.events.list(...);
}

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

ডেস্কটপ ক্লায়েন্ট

আপনি যদি নির্ধারণ করেন যে আপনার অ্যাপটি একটি ডেস্কটপ ক্লায়েন্টে OOB ফ্লো ব্যবহার করছে, তাহলে আপনাকে লুপব্যাক আইপি ঠিকানা ( localhost বা 127.0.0.1 ) ফ্লো ব্যবহার করে মাইগ্রেট করতে হবে।