نحوه عملکرد مجوز کاربر

اگر با سرویس‌های هویت گوگل یا مجوزها تازه‌کار هستید یا با آنها آشنایی ندارید، با مطالعه‌ی «مرور کلی» شروع کنید.

گوگل یک کتابخانه جاوا اسکریپت ارائه می‌دهد که شامل ویژگی‌های احراز هویت است تا به شما در مدیریت محدوده‌ها، کسب رضایت کاربر و ساده‌سازی کار با جریان‌های استاندارد OAuth 2.0 کمک کند. برنامه وب شما که در مرورگر کاربر اجرا می‌شود، از این کتابخانه برای مدیریت جریان ضمنی OAuth 2.0 یا شروع جریان کد احراز هویت که در پلتفرم backend شما به پایان می‌رسد، استفاده می‌کند.

حوزه‌های فقط احراز هویت

چندین حوزه فقط برای احراز هویت کاربر استفاده می‌شوند: email ، profile و openid . اگر برنامه شما فقط از این حوزه‌ها استفاده می‌کند، در نظر بگیرید که آیا JWT ID Token و Sign In With Google برای ثبت نام و ورود کاربر نیازهای شما را برآورده می‌کنند یا خیر. در بیشتر موارد، این ساده‌ترین روش موجود برای احراز هویت کاربر است.

اصطلاحات و مفاهیم کلیدی

این راهنماها فرض می‌کنند که شما درک اولیه‌ای از مفاهیم OAuth 2.0 و استانداردهای IETF مانند RFC6749 دارید. اصطلاحات زیر در سراسر راهنماهای مجوزدهی استفاده می‌شوند:

  • توکن دسترسی ، یک اعتبارنامه کوتاه‌مدت برای هر کاربر است که توسط گوگل صادر می‌شود و برای فراخوانی ایمن APIهای گوگل و دسترسی به داده‌های کاربر استفاده می‌شود.
  • کد مجوز، یک کد موقت است که توسط گوگل صادر می‌شود تا کاربرانی که از طریق مرورگر وارد حساب گوگل خود می‌شوند را به صورت ایمن شناسایی کند. پلتفرم بک‌اند شما این کد را با توکن‌های دسترسی و به‌روزرسانی مبادله می‌کند.
  • توکن رفرش (Refresh token) یک اعتبارنامه بلندمدت برای هر کاربر است که توسط گوگل صادر می‌شود و به طور ایمن در پلتفرم شما ذخیره می‌شود و می‌تواند برای دریافت یک توکن دسترسی جدید و معتبر، حتی زمانی که کاربر حضور ندارد، مورد استفاده قرار گیرد.
  • دامنه، توکن‌ها را به مقدار مشخص و محدودی از داده‌های کاربر محدود می‌کند، برای اطلاعات بیشتر به OAuth 2.0 Scopes for Google APIs مراجعه کنید.
  • حالت پاپ‌آپ یک جریان کد مجوزدهی است که بر اساس یک فراخوانی جاوااسکریپت در مرورگر کاربر اجرا می‌شود. گوگل، کنترل‌کننده فراخوانی شما را فراخوانی می‌کند که سپس مسئول ارسال کد مجوز به پلتفرم شما است، نحوه انجام این کار به شما بستگی دارد.
  • حالت ریدایرکت یک جریان کد مجوزدهی مبتنی بر ریدایرکت‌های HTTP است. ابتدا کاربر به گوگل ریدایرکت می‌شود، و ریدایرکت دوم از گوگل به نقطه پایانی کد مجوزدهی پلتفرم شما که شامل کد می‌شود، انجام می‌شود.

طول عمر توکن‌ها توسط گوگل، به عنوان صادرکننده، تعیین می‌شود. با توجه به عوامل مختلف، مدت زمان دقیق ممکن است متفاوت باشد.

جریان‌های OAuth 2.0

دو جریان، کد ضمنی و کد مجوز، مورد بحث قرار می‌گیرند. هر دو یک توکن دسترسی مناسب برای استفاده با API های گوگل برمی‌گردانند.

جریان کد مجوز توصیه می‌شود زیرا امنیت کاربر را بهبود می‌بخشد. این جریان همچنین یک توکن به‌روزرسانی برمی‌گرداند که می‌تواند برای دریافت توکن‌های دسترسی بدون حضور کاربر استفاده شود و پلتفرم شما را قادر می‌سازد اقدامات غیرهمزمان مانند ارسال پیامک یادآوری جلسه آینده که در آخرین لحظه برنامه‌ریزی شده است را انجام دهد. بخش «انتخاب مدل مجوز» تفاوت‌های بین این دو جریان را با جزئیات بیشتری توضیح می‌دهد.

کتابخانه جاوا اسکریپت Google Identity Services از استاندارد OAuth 2.0 برای موارد زیر پیروی می‌کند:

  • جریان ضمنی را مدیریت کنید تا برنامه وب درون مرورگر شما بتواند به سرعت یک توکن دسترسی از گوگل دریافت کند که برای فراخوانی APIهای گوگل ضروری است.
  • جریان کد مجوز را از مرورگر کاربر شروع کنید.

مراحل رایج

هر دو جریان کد ضمنی و مجوزدهی به یک شکل شروع می‌شوند:

  1. برنامه شما درخواست دسترسی به یک یا چند scope را دارد.
  2. گوگل یک کادر محاوره‌ای رضایت به کاربر نمایش می‌دهد و در صورت لزوم ابتدا کاربر را وارد حساب گوگل خود می‌کند.
  3. کاربر به صورت جداگانه هر محدوده درخواستی را تأیید می‌کند.

سپس هر جریان با مراحل مختلف به پایان می‌رسد.

هنگام استفاده از جریان ضمنی

  • گوگل از یک کنترل‌کننده‌ی فراخوانی برای اطلاع‌رسانی به برنامه‌ی شما در مورد نتیجه‌ی رضایت و بازگرداندن یک توکن دسترسی برای هرگونه محدوده‌ی تأیید شده استفاده می‌کند.

هنگام استفاده از جریان کد احراز هویت

  • گوگل با یک کد مجوز برای هر کاربر پاسخ می‌دهد:
    • در حالت ریدایرکت، کد به نقطه پایانی کد مجوز پلتفرم شما بازگردانده می‌شود.
    • در حالت محاوره‌ای، کد به کنترل‌کننده‌ی فراخوانی برنامه‌ی درون مرورگر شما بازگردانده می‌شود، بدون اینکه کاربران نیازی به ترک وب‌سایت شما داشته باشند.
  • با شروع از مرحله ۴: مدیریت پاسخ سرور OAuth 2.0، پلتفرم بک‌اند شما یک تبادل سرور به سرور با گوگل را تکمیل می‌کند که در نهایت منجر به بازگرداندن یک توکن به‌روزرسانی به ازای هر کاربر و توکن دسترسی به پلتفرم شما می‌شود.

قبل از دریافت توکن دسترسی، کاربران باید به برنامه شما اجازه دسترسی به محدوده‌های درخواستی را بدهند. برای انجام این کار، گوگل در مرحله 2 یک کادر محاوره‌ای رضایت نمایش می‌دهد و نتیجه را در myaccount.google.com/permissions ثبت می‌کند.

نام برنامه، لوگو، سیاست حفظ حریم خصوصی، شرایط خدمات و حوزه‌های درخواستی شما به همراه گزینه تأیید یا لغو درخواست به کاربر نمایش داده می‌شود.

در شکل ۱، پنجره‌ی موافقت برای یک محدوده‌ی واحد نشان داده شده است. وقتی یک محدوده‌ی واحد درخواست می‌شود، برای تأیید یا رد آن محدوده، نیازی به علامت زدن هیچ کادر تأییدی نیست.

User consent dialog with Cancel or Continue buttons and a single scope, no
checkboxes are shown.

شکل ۱: پنجره‌ی گفتگوی رضایت کاربر با یک محدوده‌ی واحد.

در شکل ۲، پنجره‌ی موافقت برای چندین محدوده نشان داده شده است. هنگامی که بیش از یک محدوده درخواست می‌شود، لازم است کادرهای انتخاب جداگانه‌ای را علامت بزنید تا کاربر بتواند هر محدوده را تأیید یا رد کند.

User consent dialog with Cancel or Continue buttons and multiple scopes, each
scope has a checkbox
selector.

شکل ۲: پنجره‌ی رضایت کاربر با چندین حوزه.

حساب‌های کاربری

برای ثبت رضایت و صدور توکن دسترسی، به یک حساب کاربری گوگل نیاز است. پیش از این، کاربران باید با ورود به یک حساب کاربری گوگل، خود را به گوگل معرفی می‌کردند.

اگرچه الزامی نیست، اما توصیه می‌شود از ورود با گوگل برای ثبت نام و ورود به برنامه وب یا پلتفرم بک‌اند خود استفاده کنید. انجام این کار با به حداقل رساندن تعداد مراحل مورد نیاز، اصطکاک کاربر را کاهش می‌دهد و به صورت اختیاری به شما امکان می‌دهد توکن‌های دسترسی را با حساب‌های جداگانه در پلتفرم خود مرتبط کنید.

برای مثال، استفاده از «ورود با گوگل» یک جلسه فعال حساب گوگل ایجاد می‌کند، بنابراین از نیاز به درخواست بعدی کاربر برای ورود به حساب گوگل هنگام ارسال درخواست مجوز جلوگیری می‌شود. اگر تصمیم دارید کاربران را با روش‌های دیگری مانند نام کاربری و رمز عبور یا سایر ارائه دهندگان هویت به برنامه خود احراز هویت کنید، آنها همچنان ملزم به ورود به حساب گوگل برای رضایت خواهند بود.

اضافه کردن یک راهنمای ورود به سیستم (login hint) در هنگام مقداردهی اولیه مجوز - که معمولاً آدرس ایمیل حساب گوگل کاربر است - به گوگل این امکان را می‌دهد که از نمایش انتخابگر حساب کاربری صرف نظر کند و یک مرحله در زمان کاربران صرفه‌جویی کند. اعتبارنامه شناسه توکن (ID Token) که توسط «ورود با گوگل» (Sign In With Google) برگردانده می‌شود، حاوی آدرس ایمیل کاربر است.

برنامه‌های وب که فقط در مرورگر اجرا می‌شوند، ممکن است برای احراز هویت کاربر صرفاً به گوگل متکی باشند و سیستم مدیریت حساب کاربری را پیاده‌سازی نکنند. در این سناریو که به عنوان جریان ضمنی شناخته می‌شود، نیازی به مرتبط کردن توکن رفرش با حساب کاربری و فضای ذخیره‌سازی امن مدیریت نیست.

از طرف دیگر، یک سیستم حساب کاربری توسط جریان کد مجوز مورد نیاز است. توکن‌های به‌روزرسانی هر کاربر باید با یک حساب کاربری جداگانه در پلتفرم بک‌اند شما مرتبط شده و برای استفاده‌های بعدی ذخیره شوند. نحوه پیاده‌سازی، کار با و مدیریت یک سیستم حساب کاربری مختص پلتفرم شماست و به تفصیل مورد بحث قرار نمی‌گیرد.

کاربران می‌توانند در هر زمانی از تنظیمات حساب گوگل خود، رضایت را مشاهده یا لغو کنند.

به صورت اختیاری، برنامه وب یا پلتفرم شما می‌تواند google.accounts.oauth2.revoke را برای لغو توکن‌ها و حذف رضایت کاربر فراخوانی کند، که زمانی مفید است که کاربر حساب خود را از پلتفرم شما حذف کند.

سایر گزینه‌های مجوز

از طرف دیگر، مرورگرها می‌توانند با استفاده از جریان ضمنی و با فراخوانی مستقیم نقاط پایانی OAuth 2.0 گوگل، همانطور که در OAuth 2.0 برای برنامه‌های وب سمت کلاینت توضیح داده شده است، توکن‌های دسترسی را به دست آورند.

به طور مشابه، برای جریان کد احراز هویت، می‌توانید روش‌های خودتان را پیاده‌سازی کنید و مراحل ذکر شده در «استفاده از OAuth 2.0 برای برنامه‌های وب سرور» را دنبال کنید.

در هر دو مورد، ما اکیداً توصیه می‌کنیم از کتابخانه Google Identity Services استفاده کنید تا زمان و تلاش توسعه خود را کاهش دهید و خطرات امنیتی مانند مواردی که در OAuth 2.0 Security Best Current Practice شرح داده شده است را به حداقل برسانید.