ওভারভিউ
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 সম্মতি স্ক্রিনে আপনি যে সমর্থন ইমেলটি নিবন্ধিত করেছেন সেটি প্রদর্শন করার সময় বার্তাটি ব্যবহারকারীদের জানিয়ে দেবে যে অ্যাপটি ব্লক করা হয়েছে।
- আপনি প্রভাবিত হলে নির্ধারণ করুন.
- আপনি প্রভাবিত হলে আরও নিরাপদ বিকল্পে মাইগ্রেট করুন।
আপনি প্রভাবিত হলে নির্ধারণ করুন
এই অবচয় শুধুমাত্র প্রোডাকশন অ্যাপের ক্ষেত্রে প্রযোজ্য (অর্থাৎ প্রোডাকশনে সেট করা প্রকাশনা স্ট্যাটাস সহ অ্যাপ। ফ্লো টেস্টিং পাবলিশিং স্ট্যাটাস সহ অ্যাপগুলির জন্য কাজ করতে থাকবে।
OAuth-এ আপনার প্রকাশনার স্থিতি পর্যালোচনা করুন Consent Screen pageএর Google API Console এবং পরবর্তী ধাপে এগিয়ে যান যদি আপনি "প্রোডাকশনে" প্রকাশনা স্ট্যাটাস সহ একটি প্রকল্পে OOB ফ্লো ব্যবহার করেন।
আপনার অ্যাপটি OOB ফ্লো ব্যবহার করছে কিনা তা কীভাবে নির্ধারণ করবেন
Google OAuth অনুমোদনের অনুরোধটি আপনার অ্যাপটি OOB রিডাইরেক্ট URI মান ব্যবহার করছে কিনা তা নির্ধারণ করতে আপনার অ্যাপ কোড বা বহির্গামী নেটওয়ার্ক কল (যদি আপনার অ্যাপ একটি 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
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>
আউটগোয়িং নেটওয়ার্ক কল পরিদর্শন করুন
- ওয়েব অ্যাপ্লিকেশন - Chrome এ নেটওয়ার্ক কার্যকলাপ পরিদর্শন করুন
- অ্যান্ড্রয়েড - নেটওয়ার্ক ইন্সপেক্টরের সাথে নেটওয়ার্ক ট্র্যাফিক পরিদর্শন করুন
- ক্রোম অ্যাপস
- Chrome এক্সটেনশন পৃষ্ঠায় নেভিগেট করুন
- এক্সটেনশন পৃষ্ঠার উপরের ডানদিকে বিকাশকারী মোড চেকবক্সটি চেক করুন৷
- আপনি নিরীক্ষণ করতে চান এক্সটেনশন নির্বাচন করুন
- এক্সটেনশন পৃষ্ঠার ভিউ পরিদর্শন বিভাগে ব্যাকগ্রাউন্ড পৃষ্ঠা লিঙ্কে ক্লিক করুন
- একটি বিকাশকারী সরঞ্জাম পপআপ খুলবে যেখানে আপনি নেটওয়ার্ক ট্যাবে নেটওয়ার্ক ট্র্যাফিক নিরীক্ষণ করতে পারেন৷
- iOS - যন্ত্রের সাহায্যে HTTP ট্র্যাফিক বিশ্লেষণ করা
- ইউনিভার্সাল উইন্ডোজ প্ল্যাটফর্ম (UWP) - ভিজ্যুয়াল স্টুডিওতে নেটওয়ার্ক ট্র্যাফিক পরিদর্শন করুন
- ডেস্কটপ অ্যাপস - যে অপারেটিং সিস্টেমের জন্য অ্যাপটি তৈরি করা হয়েছে তার জন্য উপলব্ধ একটি নেটওয়ার্ক ক্যাপচার টুল ব্যবহার করুন
redirect_uri
প্যারামিটারে নিম্নলিখিত মানগুলির মধ্যে কোনটি আছে কিনা তা নির্ধারণ করুন:-
redirect_uri=urn:ietf:wg:oauth:2.0:oob
-
redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
-
redirect_uri=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 পুনঃনির্দেশ ইউআরআই ব্যবহার না করে Google এপিআই অ্যাক্সেস করতে কীভাবে 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 এন্ডপয়েন্টে সমস্ত কল পরিচালনা করা সহজ করে তোলে৷
সার্ভার-সাইড (অফলাইন) অ্যাক্সেস
- একটি সার্ভার দাঁড় করান এবং অনুমোদন কোড পাওয়ার জন্য একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য এন্ডপয়েন্ট (রিডাইরেক্ট ইউআরআই) সংজ্ঞায়িত করুন।
- পুনঃনির্দেশ URI কনফিগার করুন Credentials page এর Google API Console
নিচের কোড স্নিপেটটি 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
) ফ্লো ব্যবহার করে মাইগ্রেট করতে হবে।