আপনি ইন্টারনেট-সংযুক্ত টিভির মতো সীমিত ইনপুট ক্ষমতা সহ ডিভাইসগুলিতে ব্যবহারকারীদের তাদের Google অ্যাকাউন্ট দিয়ে আপনার অ্যাপে সাইন ইন করতে দিতে পারেন।
অ্যাপটি ব্যবহারকারীকে একটি সংক্ষিপ্ত কোড এবং সাইন-ইন URL প্রদর্শন করে। তারপরে, ব্যবহারকারী একটি ওয়েব ব্রাউজারে সাইন-ইন URLটি খোলে, কোডটি প্রবেশ করে এবং ব্যবহারকারীর সাইন-ইন তথ্য অ্যাক্সেস করার জন্য অ্যাপটিকে অনুমতি দেয়৷ অবশেষে, অ্যাপটি নিশ্চিতকরণ পায় এবং ব্যবহারকারী সাইন ইন করে।
এই সাইন-ইন ফ্লো ব্যবহার করতে, অ্যাপটিকে অবশ্যই এমন একটি ডিভাইসে চলতে হবে যা নিম্নলিখিত মানদণ্ড পূরণ করে:
- ডিভাইসটি ব্যবহারকারীকে নির্দেশাবলী সহ একটি 40-অক্ষরের URL এবং একটি 15-অক্ষরের ব্যবহারকারী কোড প্রদর্শন করতে সক্ষম হতে হবে।
- ডিভাইসটি অবশ্যই ইন্টারনেটের সাথে সংযুক্ত থাকতে হবে।
একটি ক্লায়েন্ট আইডি এবং ক্লায়েন্ট গোপন পান
Google-এর সাইন-ইন এন্ডপয়েন্টে অনুরোধ করার জন্য আপনার অ্যাপের একটি OAuth 2.0 ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট প্রয়োজন।
আপনার প্রকল্পের ক্লায়েন্ট আইডি এবং ক্লায়েন্টের গোপনীয়তা খুঁজে পেতে, নিম্নলিখিতগুলি করুন:
- একটি বিদ্যমান OAuth 2.0 শংসাপত্র নির্বাচন করুন বা শংসাপত্র পৃষ্ঠা খুলুন।
- যদি আপনি ইতিমধ্যে এটি না করে থাকেন, তাহলে ক্রেডেনশিয়াল তৈরি করুন > OAuth ক্লায়েন্ট আইডি ক্লিক করে এবং শংসাপত্র তৈরি করার জন্য প্রয়োজনীয় তথ্য প্রদান করে আপনার প্রকল্পের OAuth 2.0 শংসাপত্র তৈরি করুন৷
- OAuth 2.0 ক্লায়েন্ট আইডি বিভাগে ক্লায়েন্ট আইডি খুঁজুন। বিস্তারিত জানার জন্য, ক্লায়েন্ট আইডি ক্লিক করুন.
আপনি যদি একটি নতুন ক্লায়েন্ট আইডি তৈরি করেন, তাহলে টিভি এবং লিমিটেড ইনপুট ডিভাইস অ্যাপ্লিকেশনের ধরন নির্বাচন করুন৷
একটি ব্যবহারকারী কোড এবং যাচাইকরণ URL প্রাপ্ত করুন
একবার একজন ব্যবহারকারী Google অ্যাকাউন্ট ব্যবহার করে সাইন ইন করার অনুরোধ করলে, আপনি OAuth 2.0 ডিভাইসের এন্ডপয়েন্ট, https://oauth2.googleapis.com/device/code
এ একটি HTTP POST অনুরোধ পাঠিয়ে একটি ব্যবহারকারী কোড এবং যাচাইকরণ URL পাবেন। আপনার ক্লায়েন্ট আইডি এবং অনুরোধের সাথে আপনার প্রয়োজনীয় সুযোগগুলির একটি তালিকা অন্তর্ভুক্ত করুন। আপনি যদি ব্যবহারকারীদের শুধুমাত্র তাদের Google অ্যাকাউন্ট দিয়ে সাইন ইন করতে চান, শুধুমাত্র profile
এবং email
স্কোপের অনুরোধ করুন; অথবা, আপনি ব্যবহারকারীদের পক্ষ থেকে একটি সমর্থিত API কল করার অনুমতির অনুরোধ করতে চাইলে, profile
এবং email
স্কোপ ছাড়াও প্রয়োজনীয় স্কোপের অনুরোধ করুন।
নিম্নলিখিত একটি ব্যবহারকারী কোড জন্য একটি উদাহরণ অনুরোধ:
POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_GOOGLE_CLIENT_ID&scope=email%20profile
curl
ব্যবহার করে:
curl -d "client_id=YOUR_GOOGLE_CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code
প্রতিক্রিয়া একটি JSON অবজেক্ট হিসাবে ফিরে এসেছে:
{
"device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
"user_code" : "GQVQ-JKEC",
"verification_url" : "https://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
আপনার অ্যাপ ব্যবহারকারীকে user_code
এবং verification_url
মানগুলি প্রদর্শন করে এবং একই সময়ে, ব্যবহারকারী সাইন ইন না করা পর্যন্ত বা expires_in
দ্বারা নির্দিষ্ট সময় অতিক্রান্ত না হওয়া পর্যন্ত নির্দিষ্ট interval
সাইন-ইন এন্ডপয়েন্ট পোল করে।
ব্যবহারকারী কোড এবং যাচাইকরণ URL প্রদর্শন করুন
আপনি ডিভাইস এন্ডপয়েন্ট থেকে একটি ব্যবহারকারী কোড এবং যাচাইকরণ URL পাওয়ার পরে, সেগুলি প্রদর্শন করুন এবং ব্যবহারকারীকে URL খুলতে এবং ব্যবহারকারীর কোড লিখতে নির্দেশ দিন৷
verification_url
এবং user_code
এর মান পরিবর্তন সাপেক্ষে। আপনার UI এমনভাবে ডিজাইন করুন যা নিম্নলিখিত সীমাগুলি পরিচালনা করতে পারে:
-
user_code
অবশ্যই 15W
আকারের অক্ষর পরিচালনা করার জন্য যথেষ্ট প্রশস্ত ক্ষেত্রে প্রদর্শিত হবে। -
verification_url
অবশ্যই 40 অক্ষর দীর্ঘ একটি URL স্ট্রিং পরিচালনা করার জন্য যথেষ্ট প্রশস্ত ক্ষেত্রে প্রদর্শিত হবে।
উভয় স্ট্রিংই US-ASCII অক্ষর সেট থেকে যেকোনো মুদ্রণযোগ্য অক্ষর ধারণ করতে পারে।
আপনি যখন user_code
স্ট্রিংটি প্রদর্শন করেন, তখন কোনোভাবেই স্ট্রিংটি পরিবর্তন করবেন না (যেমন কেস পরিবর্তন করা বা অন্যান্য ফরম্যাটিং অক্ষর সন্নিবেশ করানো), কারণ ভবিষ্যতে কোডের বিন্যাস পরিবর্তন হলে আপনার অ্যাপটি ভেঙে যেতে পারে।
আপনি যদি চয়ন করেন প্রদর্শনের উদ্দেশ্যে URL থেকে স্কিমটি বন্ধ করে verification_url
url স্ট্রিংটি সংশোধন করতে পারেন৷ আপনি যদি তা করেন তবে নিশ্চিত হন যে আপনার অ্যাপটি "http" এবং "https" উভয় রূপই পরিচালনা করতে পারে। অন্যথায় verification_url
স্ট্রিং পরিবর্তন করবেন না।
ব্যবহারকারী যখন যাচাইকরণ URL-এ নেভিগেট করে, তখন তারা নিম্নলিখিতগুলির মতো একটি পৃষ্ঠা দেখতে পায়:
ব্যবহারকারী ব্যবহারকারী কোডটি প্রবেশ করার পরে, Google সাইন-ইন সাইট নিম্নলিখিতগুলির মতো একটি সম্মতি স্ক্রীন উপস্থাপন করে:
ব্যবহারকারী যদি Allow এ ক্লিক করেন, তাহলে আপনার অ্যাপ ব্যবহারকারীকে শনাক্ত করার জন্য একটি আইডি টোকেন, Google API-কে কল করার জন্য একটি অ্যাক্সেস টোকেন এবং নতুন টোকেন অর্জনের জন্য একটি রিফ্রেশ টোকেন পেতে পারে।
একটি আইডি টোকেন পান এবং টোকেন রিফ্রেশ করুন
আপনার অ্যাপ ব্যবহারকারী কোড এবং যাচাইকরণ URL প্রদর্শন করার পরে, আপনি ডিভাইসের শেষ পয়েন্ট থেকে প্রাপ্ত ডিভাইস কোডের সাথে টোকেন এন্ডপয়েন্ট ( https://oauth2.googleapis.com/token
) পোলিং শুরু করুন৷ ব্যবধানে টোকেন এন্ডপয়েন্ট পোল করুন, সেকেন্ডে, interval
মান দ্বারা নির্দিষ্ট করা।
নিম্নলিখিত একটি উদাহরণ অনুরোধ:
POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_GOOGLE_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0
curl
ব্যবহার করে:
curl -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=YOUR_DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token
যদি ব্যবহারকারী এখনও অনুরোধটি অনুমোদন না করে থাকে, তাহলে প্রতিক্রিয়াটি নিম্নরূপ:
{
"error" : "authorization_pending"
}
আপনার অ্যাপের এই অনুরোধগুলিকে এমন হারে পুনরাবৃত্তি করা উচিত যা interval
মান অতিক্রম না করে। যদি আপনার অ্যাপ খুব দ্রুত ভোট দেয়, তাহলে প্রতিক্রিয়া নিম্নরূপ:
{
"error" : "slow_down"
}
একবার ব্যবহারকারী সাইন ইন করে এবং আপনার অনুরোধ করা স্কোপে আপনার অ্যাপ অ্যাক্সেস মঞ্জুর করলে, আপনার অ্যাপের পরবর্তী অনুরোধের প্রতিক্রিয়াতে একটি আইডি টোকেন, একটি অ্যাক্সেস টোকেন এবং একটি রিফ্রেশ টোকেন অন্তর্ভুক্ত থাকে:
{
"access_token": "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
"id_token": "eyJhbGciOiJSUzI..."
}
এই প্রতিক্রিয়া প্রাপ্তির পরে, আপনার অ্যাপ সাইন-ইন করা ব্যবহারকারীর সম্পর্কে মৌলিক প্রোফাইল তথ্য পেতে আইডি টোকেনটি ডিকোড করতে পারে, অথবা সার্ভারের সাথে নিরাপদে প্রমাণীকরণ করতে আপনার অ্যাপের ব্যাকএন্ড সার্ভারে আইডি টোকেন পাঠাতে পারে । এছাড়াও, ব্যবহারকারী অনুমোদিত Google API-কে কল করতে আপনার অ্যাপ অ্যাক্সেস টোকেন ব্যবহার করতে পারে।
আইডি এবং অ্যাক্সেস টোকেন সীমিত জীবনকাল আছে. ব্যবহারকারীকে টোকেনগুলির জীবনকালের বাইরে সাইন ইন রাখতে, রিফ্রেশ টোকেন সংরক্ষণ করুন এবং নতুন টোকেনগুলির অনুরোধ করতে এটি ব্যবহার করুন৷
আইডি টোকেন থেকে ব্যবহারকারীর প্রোফাইল তথ্য পান
আপনি যেকোন JWT-ডিকোডিং লাইব্রেরির সাথে আইডি টোকেন ডিকোড করে সাইন-ইন করা ব্যবহারকারী সম্পর্কে প্রোফাইল তথ্য পেতে পারেন। উদাহরণস্বরূপ, Auth0 jwt-decode JavaScript লাইব্রেরি ব্যবহার করে:
var user_profile = jwt_decode(<var>id_token</var>);
// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];
// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];
আরও তথ্য
- একটি আইডি টোকেনের জীবনকালের বাইরে ব্যবহারকারীদের সাইন-ইন রাখতে, একটি অ্যাক্সেস টোকেন রিফ্রেশ করা দেখুন।
- আপনার যদি ব্যাকএন্ড সার্ভারের সাথে প্রমাণীকরণের প্রয়োজন হয়, তবে নিরাপদে এটি করার তথ্যের জন্য একটি ব্যাকএন্ড সার্ভারের সাথে প্রমাণীকরণ দেখুন।