OAuth কী? "Google দিয়ে সাইন ইন" ও অনুমোদিত অ্যাক্সেস ব্যাখ্যা
OAuth হলো একটি উন্মুক্ত মানদণ্ড, যা একজন ব্যবহারকারীকে তার পাসওয়ার্ড না দিয়েই একটি অ্যাপকে অন্য সেবায় তার অ্যাকাউন্টে সীমিত অ্যাক্সেস দিতে দেয়। আপনি "Connect Google Calendar" চাপলে যখন "এই অ্যাপ কি আপনার ইভেন্ট দেখতে পারবে?" জিজ্ঞেস করা স্ক্রিন আসে, সেটিই OAuth। অ্যাপ ঠিক যা আপনি অনুমোদন করেছেন তার জন্য একটি token পায়, যা আপনি যেকোনো সময় বাতিল করতে পারেন। একই প্রক্রিয়া, সঙ্গে OpenID Connect নামের একটি অতিরিক্ত স্তর, "Sign in with Google" ও অনুরূপ বাটনগুলো চালায়।
AI দিয়ে বানানোর ক্ষেত্রে OAuth কেন গুরুত্বপূর্ণ
একটি অ্যাপ বানানোর সময় OAuth সাধারণত দুটি পরিস্থিতিতে আসে:
- Social login। আপনি চান আপনার ব্যবহারকারীরা আলাদা একটি পাসওয়ার্ড বানানোর বদলে "Google দিয়ে সাইন ইন" (বা Apple, Microsoft, GitHub) করুক। দেখুন আপনার অ্যাপে লগইন কীভাবে যোগ করবেন।
- ব্যবহারকারীদের অন্য সেবার অ্যাকাউন্টে সংযোগ। আপনার অ্যাপের দরকার ব্যবহারকারীর ক্যালেন্ডার পড়া, তার সোশ্যাল অ্যাকাউন্টে পোস্ট করা, তার ক্লাউড ড্রাইভ থেকে ফাইল আনা বা তার অ্যাকাউন্টিং ডেটা সিঙ্ক করা।
দুই ক্ষেত্রেই আপনার AI বিল্ডার কোড লিখতে পারে, কিন্তু কিছু ধাপ শুধু আপনিই করতে পারেন: প্রোভাইডারের সঙ্গে একটি developer অ্যাপ তৈরি করা, একটি client ID ও client secret নেওয়া, callback URL নিবন্ধন করা, এবং কিছু অনুমতির জন্য প্রোভাইডারের রিভিউ পার করা। OAuth কীভাবে কাজ করে জানলে সেই ধাপগুলো ও তাদের ত্রুটি কম রহস্যময় লাগে। লগইনের বৃহত্তর চিত্রের জন্য দেখুন authentication কী।
একটি দৈনন্দিন উপমা
একটি হোটেলের কী-কার্ডের কথা ভাবুন। চেক-ইনের সময় রিসেপশন নিশ্চিত করে আপনি কে, তারপর একটি কার্ড দেয় যা আপনার রুম ও জিমের দরজা খোলে, অন্য রুম বা স্টাফ এলাকার নয়, এবং চেক-আউটের পর কাজ করা বন্ধ হয়। কার্ডে আপনার পাসপোর্ট থাকে না। হারালে রিসেপশন সেটি বাতিল করে নতুন দেয়।
- রিসেপশন হলো authorization server (Google-এর সাইন-ইন পেজ)।
- আপনার পরিচয় যাচাই হলো Google-এ আপনার সাইন ইন।
- কী-কার্ড হলো access token।
- "শুধু রুম ও জিম" হলো আপনার অনুমোদিত scopes।
- চেক-আউট হলো token-এর মেয়াদ শেষ হওয়া, বা আপনার অ্যাক্সেস বাতিল করা।
যে অ্যাপটি আপনি ব্যবহার করছেন সে কখনো আপনার Google পাসওয়ার্ড দেখে না, শুধু কী-কার্ডটি দেখে।
OAuth ধাপে ধাপে কীভাবে কাজ করে
ওয়েব অ্যাপের জন্য সবচেয়ে সাধারণ ফ্লো হলো authorization code flow। একজন ব্যবহারকারী যখন একটি সময়সূচি অ্যাপে তার Google Calendar যুক্ত করেন, তখন যা ঘটে:
- ক্লিক। ব্যবহারকারী "Connect Google Calendar" চাপেন।
- প্রোভাইডারের দিকে redirect। অ্যাপ ব্রাউজারকে তার client ID, যে scopes চায় (ক্যালেন্ডার ইভেন্ট পড়া) এবং redirect URI সহ Google-এ পাঠায়, যেখানে Google ব্যবহারকারীকে ফেরত পাঠাবে।
- সাইন ইন ও সম্মতি। ব্যবহারকারী Google-এ সাইন ইন করেন (যদি আগে থেকে না থাকেন) এবং একটি সম্মতি স্ক্রিন দেখেন, যেখানে অ্যাপ যা চাইছে তার তালিকা থাকে। তিনি Allow চাপেন।
- একটি কোড নিয়ে ফেরত। Google ব্রাউজারকে অ্যাপের redirect URI-তে একটি স্বল্পমেয়াদি, একবারের authorization code সহ ফেরত পাঠায়।
- সার্ভারে বিনিময়। অ্যাপের সার্ভার সেই কোড ও তার client secret সরাসরি Google-এ পাঠায় এবং একটি access token (প্রায়ই একটি refresh token-সহ) পায়।
- API ব্যবহার। সার্ভার access token দিয়ে Google Calendar API কল করে এবং ব্যবহারকারীর ইভেন্টগুলো পায়।
ধাপ ৪-এর callback দেখতে এমন:
https://yourapp.com/auth/google/callback?code=4/0Adeu5B...&state=x7Kq9
আর ধাপ ৫-এর token উত্তরটি এমন JSON:
{
"access_token": "ya29.a0Af...",
"expires_in": 3599,
"refresh_token": "1//0gL...",
"scope": "https://www.googleapis.com/auth/calendar.readonly",
"token_type": "Bearer"
}
মূল নকশার বিষয়টি হলো: token বিনিময় সার্ভার-থেকে-সার্ভারে হয়, তাই client secret ও token কখনো ব্রাউজারের ভেতর দিয়ে যাওয়ার দরকার পড়ে না।
OAuth বনাম OpenID Connect বনাম আপনার নিজের লগইন
| কোন প্রশ্নের উত্তর দেয় | উদাহরণ | |
|---|---|---|
| OAuth 2.0 | "এই অ্যাপ ব্যবহারকারীর পক্ষে কী করতে পারবে?" (অনুমোদন) | একজন ব্যবহারকারীর ক্যালেন্ডার পড়া |
| OpenID Connect (OIDC) | "এই ব্যবহারকারী কে?" (প্রমাণীকরণ), OAuth-এর ওপর তৈরি | "Google দিয়ে সাইন ইন" একটি যাচাইকৃত ইমেইল ফেরত দেয় |
| আপনার নিজের লগইন | "এটি কি এই অ্যাকাউন্টের সঠিক পাসওয়ার্ড?" | আপনার ডাটাবেসে সংরক্ষিত (হ্যাশ করা) ইমেইল ও পাসওয়ার্ড |
অনেক অ্যাপ এগুলো একসঙ্গে ব্যবহার করে: ইমেইল-ও-পাসওয়ার্ড লগইন, সঙ্গে OIDC-এর মাধ্যমে "Google দিয়ে সাইন ইন", আর অন্য সেবার সঙ্গে আলাদা OAuth সংযোগ।
মূল শব্দ
| শব্দ | অর্থ |
|---|---|
| Provider / authorization server | যে সেবায় ব্যবহারকারী সাইন ইন করেন এবং অ্যাক্সেস অনুমোদন দেন, যেমন Google, Microsoft, GitHub। |
| Client | প্রোভাইডারের কাছে নিবন্ধিত আপনার অ্যাপ। |
| Client ID | প্রোভাইডারের কাছে আপনার অ্যাপের প্রকাশ্য শনাক্তকারী। |
| Client secret | প্রোভাইডারের কাছে আপনার অ্যাপের ব্যক্তিগত পাসওয়ার্ড। শুধু সার্ভারে। |
| Scope | একটি নির্দিষ্ট অনুমতি, যেমন "ক্যালেন্ডার পড়া" বা "ইমেইল ঠিকানা দেখা"। |
| Consent screen | যে পেজে ব্যবহারকারী চাওয়া scopes দেখেন এবং অনুমোদন দেন। |
| Redirect URI / callback URL | প্রোভাইডার যেখানে ব্যবহারকারীকে ফেরত পাঠায়। আগে থেকে নিবন্ধিত হতে হবে এবং হুবহু মিলতে হবে। |
| Access token | API কল করার স্বল্পমেয়াদি credential। |
| Refresh token | নতুন access token নেওয়ার দীর্ঘমেয়াদি credential। পাসওয়ার্ডের মতো সংরক্ষণ করুন। |
| ID token | OIDC-এ একটি স্বাক্ষরিত token, যা ব্যবহারকারী কে তা বর্ণনা করে। |
| PKCE | একটি অতিরিক্ত যাচাই ("proof key"), যা আটকানো কোড ব্যবহারে বাধা দেয়। সব ক্লায়েন্টের জন্য সুপারিশকৃত। |
| state | একটি এলোমেলো মান, যা জাল অনুরোধ থেকে ফ্লোকে রক্ষা করে। |
সাধারণ ভুল ধারণা
- "OAuth একটি লগইন সিস্টেম।" সাধারণ OAuth অ্যাক্সেস দেয়; পরিচয়ের কাজ করে OpenID Connect। শুধু একটি access token-কে কেউ কে তার প্রমাণ হিসেবে ব্যবহার করলে বাস্তব নিরাপত্তা বাগ হয়েছে।
- "অ্যাপ আমার পাসওয়ার্ড পায়।" এটি কখনো পায় না। এটাই মূল কথা।
- "আরও বেশি scope চাওয়া নিরীহ।" ব্যবহারকারীরা ব্যাপক অনুরোধে বেশি সতর্ক হন, আর Google-এর মতো প্রোভাইডার সংবেদনশীল বা সীমাবদ্ধ scope-এর জন্য অ্যাপ রিভিউ চাইতে পারে। যতটুকু দরকার ততটুকুই চান।
- "Client secret ফ্রন্টএন্ডে রাখা যায়।" ব্রাউজার কোডে যা থাকে তা প্রকাশ্য। এটি সার্ভার-সাইড সিক্রেট-এ রাখুন।
- "টেস্টে কাজ করলে প্রোডাকশনেও করবে।" প্রোভাইডাররা যাচাইহীন অ্যাপ সীমিত করে, যেমন তালিকাভুক্ত টেস্ট ব্যবহারকারীতে; আর আপনার লাইভ ডোমেইনের redirect URI আলাদাভাবে নিবন্ধন করতে হয়।
- "Token চিরকাল থাকে।" Access token দ্রুত মেয়াদ শেষ হয়, আর ব্যবহারকারী অ্যাক্সেস বাতিল করতে পারেন। আপনার অ্যাপকে দুটোই সামলাতে হবে।
AI বিল্ডারকে কী বলবেন
- "একটি ভালোভাবে রক্ষণাবেক্ষণ করা auth লাইব্রেরি দিয়ে OpenID Connect ব্যবহার করে 'Google দিয়ে সাইন ইন' যোগ করো — OAuth ফ্লো নিজে লিখো না।"
- "PKCE সহ authorization code flow ব্যবহার করো এবং
stateparameter যাচাই করো।" - "Client ID ও client secret সার্ভারে environment variables থেকে পড়ো।"
- "শুধু যতটুকু দরকার ততটুকু scope চাও: শুধু-পড়ার ক্যালেন্ডার অ্যাক্সেস।"
- "প্রোভাইডারের কনসোলে কোন কোন redirect URL নিবন্ধন করতে হবে বলো — প্রিভিউ, প্রকাশিত URL ও আমার কাস্টম ডোমেইনের জন্য।"
- "Refresh token ডাটাবেসে এনক্রিপ্ট করে রাখো, আর মেয়াদ শেষ বা বাতিল token হলে ব্যবহারকারীকে আবার সংযুক্ত করতে বলো।"
- "ব্যবহারকারীকে তার সেটিংস পেজ থেকে ইন্টিগ্রেশন বিচ্ছিন্ন করার সুযোগ দাও।"
Mythex-এ OAuth
Mythex-এ আপনার বানানো অ্যাপের জন্য অন্তর্নির্মিত end-user লগইন নেই; এর ডকস একটি bring-your-own পদ্ধতির কথা বলে: আপনি একটি auth লাইব্রেরি বা হোস্টেড প্রোভাইডার বেছে নেন, তার কী প্রজেক্ট সিক্রেট হিসেবে রাখেন, এবং এজেন্ট কোড লেখে। authentication যোগ করার রেসিপি-এ এর জন্য একটি শুরুর প্রম্পট আছে। Mythex-এর নিজের মধ্যেও আপনি OAuth-এর মুখোমুখি হবেন: Google দিয়ে সাইন আপ করা যায়, রিপো সিঙ্কের জন্য GitHub যুক্ত করা GitHub OAuth ব্যবহার করে, এবং MCP-র মাধ্যমে Mythex-এর সঙ্গে যুক্ত হওয়া AI ক্লায়েন্টরা একটি সম্মতি পেজের মধ্য দিয়ে যায়। আরও জানতে দেখুন authentication কী এবং two-factor authentication কী।
প্রশ্নোত্তর
সহজ কথায় OAuth কী?
OAuth হলো একটি প্রমিত উপায়, যেখানে একজন ব্যবহারকারী একটি অ্যাপকে অন্য সেবায় তার অ্যাকাউন্টে সীমিত অ্যাক্সেস দিতে পারেন, পাসওয়ার্ড না দিয়ে। যেমন একটি সময়সূচি অ্যাপকে তার Google Calendar পড়ার অনুমতি দেওয়া। ব্যবহারকারী নির্দিষ্ট অনুমতি অনুমোদন করেন, আর অ্যাপ শুধু সেগুলোর জন্য একটি token পায়।
OAuth কি "Google দিয়ে সাইন ইন"-এর সমান?
"Google দিয়ে সাইন ইন" তৈরি হয়েছে OAuth 2.0 ও OpenID Connect-এর ওপর। OpenID Connect হলো OAuth-এর ওপরের একটি স্তর, যা অ্যাপকে জানায় ব্যবহারকারী কে। OAuth নিজে অ্যাক্সেস দেওয়ার বিষয়ে; OpenID Connect সেটিকে লগইনে পরিণত করে।
OAuth অ্যাক্সেস token কী?
অ্যাক্সেস token হলো একটি credential, যা অ্যাপ কোনো সেবার API-তে পাঠায় প্রমাণ করতে যে তাকে অ্যাক্সেস দেওয়া হয়েছে। এটি সাধারণত স্বল্পমেয়াদি এবং ব্যবহারকারী যে অনুমতিগুলো (scopes) অনুমোদন করেছেন, শুধু সেগুলোতেই সীমাবদ্ধ। Refresh token দেওয়া হলে অ্যাপ ব্যবহারকারীকে আবার না জিজ্ঞেস করেই নতুন অ্যাক্সেস token নিতে পারে।
redirect_uri_mismatch মানে কী?
এর মানে সাইন-ইনের সময় আপনার অ্যাপ যে callback URL পাঠিয়েছে, তা প্রোভাইডারের developer console-এ নিবন্ধিত URL-এর সঙ্গে হুবহু মেলেনি। আপনার অ্যাপ যেসব ঠিকানায় চলে, প্রতিটির জন্য সঠিক URL যোগ করুন, যার মধ্যে https, ডোমেইন, পাথ এবং শেষের স্ল্যাশও ধরা আছে।
OAuth কি নিরাপদ?
সঠিকভাবে বাস্তবায়ন করলে OAuth 2.0 ব্যাপকভাবে ব্যবহৃত ও নিরাপদ: PKCE সহ authorization code flow, হুবহু redirect URL, state parameter, এবং client secret ও token সার্ভারে রাখা। বেশিরভাগ সমস্যা আসে বাস্তবায়নের শর্টকাট থেকে, তাই একটি ভালোভাবে রক্ষণাবেক্ষণ করা লাইব্রেরি ব্যবহার করা সুপারিশ করা হয়।