از ClientLogin به OAuth 2.0 حرکت کنید

ایکای لان، YouTube Developer Relations – June 2013

APIهای یوتیوب از OAuth 2.0 برای تأیید درخواست‌های کاربر استفاده می‌کنند. مرتباً از ما پرسیده می‌شود که آیا در آینده پشتیبانی از احراز هویت ClientLogin یا چیزی مشابه آن را به APIهای یوتیوب اضافه خواهیم کرد یا خیر. با این حال، ما رسماً ClientLogin از 20 آوریل 2012 منسوخ کردیم و هیچ برنامه‌ای برای اضافه کردن چنین مکانیسمی وجود ندارد.

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

استفاده از OAuth 2.0 برای اسکریپت‌های مستقل سمت سرور

بسیاری از توسعه‌دهندگان از ClientLogin برای تأیید اسکریپت‌های خط فرمان که بدون مرورگر روی سرورها اجرا می‌شوند، استفاده می‌کنند. با OAuth 2.0، تقریباً همیشه یک مرورگر درگیر خواهد بود - به استثنای زمانی که روی یک برنامه اندروید کار می‌کنید که Google Play Services برای دریافت توکن‌ها از طریق GoogleAuthUtil.

در یک جریان فقط وب ، وب‌سایتی که می‌خواهد فراخوانی‌های API احراز هویت‌شده را از طرف یک کاربر انجام دهد، باید کاربر را به صفحه احراز هویت google.com هدایت کند که توضیح می‌دهد برنامه قصد دسترسی به چه چیزی را دارد. سپس برنامه وب یک توکن دریافت می‌کند که از آن برای برقراری فراخوانی‌های API استفاده می‌کند. سپس کاربر می‌تواند در هر زمان با استفاده از صفحه connected apps and sites دسترسی برنامه را لغو کند.

نمونه‌های کد پایتون ما نشان می‌دهند که چگونه اسکریپت‌های خط فرمان می‌توانند یک مرورگر را اجرا کرده و فراخوانی‌های API را از یک پنجره ترمینال انجام دهند، یک سرور محلی ایجاد کنند تا پس از تغییر مسیر مجوز، به کد گوش دهد و به طور خودکار یک توکن را برای فراخوانی‌های API آینده ذخیره کند. ویدئویی از این عملکرد در زیر آمده است:

توکن مورد استفاده یک رشته ASCII است. اگر توکن offline باشد، قابل حمل است. با استفاده از توکن بازیابی شده، می‌توانید اسکریپت را روی دسکتاپ خود اجرا کنید، سپس کد را روی یک سرور راه دور بدون رابط کاربری گرافیکی کپی و استفاده کنید، مشروط بر اینکه کد یک کلاینت OAuth 2.0 با همان شناسه کلاینت و رمز عبور ایجاد کند. علاوه بر پایتون، کتابخانه‌های کلاینت Google API برای سایر زبان‌های برنامه‌نویسی نیز روش‌های کمکی برای مدیریت توکن‌ها ارائه می‌دهند که می‌توانند بین کلاینت‌ها به اشتراک گذاشته شوند و حتی در کتابخانه‌های HTTP سطح پایین‌تر مستقیماً در هدر کلاینت یا به عنوان پارامتر URL استفاده شوند.

چند نمونه از اسکریپت‌های سمت سرور که از توکن‌های آفلاین استفاده می‌کنند:

  • یک سرویس کمکی که دایرکتوری را برای آپلود خودکار ویدیوهای جدید در یوتیوب رصد می‌کند
  • یک کرون جاب که لیست‌های پخش را روزانه با محتوای جدید به‌روزرسانی می‌کند
  • اسکریپتی که داده‌های ویدیویی را از طریق API یوتیوب آنالیتیکس رصد می‌کند و در صورت وقوع رویدادهای خاص، مانند تجاوز مجموع زمان تماشای ویدیو از یک حد، به مدیران کانال اطلاع می‌دهد. توجه داشته باشید که در این مورد، OAuth 2.0 تنها روش تأیید هویت پشتیبانی شده است زیرا API آنالیتیکس از ClientLogin پشتیبانی نمی‌کند.

بخش مربوط به توکن‌های دسترسی با طول عمر بالا، جزئیات بیشتری در مورد نحوه تولید توکن‌های آفلاین که می‌توانند برای فرآیندهای سمت سرور استفاده شوند، ارائه می‌دهد.

بهترین شیوه‌های شناسایی مشتری و راز مشتری

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

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

در دستگاه‌های اندروید، به جای استفاده از شناسه کلاینت و رمز کلاینت، برنامه شما با استفاده از ترکیبی از نام بسته و هش گواهی امضا شناسایی می‌شود. در دستگاه‌های iOS، از شناسه بسته و شناسه فروشگاه برنامه استفاده می‌شود. مستندات رسمی در مورد بازیابی این اطلاعات را می‌توانید در صفحه راهنمای Google Cloud console بیابید.

حساب‌های کاربری سرویس با API یوتیوب کار نمی‌کنند

حساب‌های سرویس برای فراخوانی‌های YouTube Data API کار نمی‌کنند، زیرا حساب‌های سرویس به یک کانال یوتیوب مرتبط نیاز دارند و شما نمی‌توانید کانال‌های جدید یا موجود را با حساب‌های سرویس مرتبط کنید. اگر از یک حساب سرویس برای فراخوانی YouTube Data API استفاده کنید، سرور API خطایی را با نوع خطا که روی unauthorized تنظیم شده و دلیل آن youtubeSignupRequired تنظیم شده است، برمی‌گرداند.

دسترسی آفلاین/طولانی مدت به API یوتیوب

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

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

توصیه می‌شود برای این مورد از جریان «برنامه نصب‌شده» استفاده کنید. اگر به دسترسی طولانی‌مدت به API یوتیوب در یک برنامه وب نیاز دارید، می‌توانید با تنظیم پارامتر access_type روی offline و پارامتر approval_prompt برای force درخواست مجوز اولیه یا پیکربندی کلاینت خود، آن را بازیابی کنید. برخی از کتابخانه‌های کلاینت، دریافت و به‌روزرسانی توکن‌های دسترسی را مدیریت می‌کنند. اگر علاقه‌مند به نوشتن کد مجوز سفارشی خود هستید، ما یک پست وبلاگ در وبلاگ Google Code منتشر کرده‌ایم که می‌توانید از آن به عنوان پایه کد خود استفاده کنید.

استفاده از OAuth 2.0 با تلفن‌ها، تبلت‌ها و سایر دستگاه‌ها

هنگام نوشتن برنامه‌های اندروید، توسعه‌دهندگان می‌توانند از Google Play services برای مدیریت جزئیات مجوز استفاده کنند. سرویس‌های گوگل پلی یک جریان مجوز استاندارد برای همه APIهای گوگل ، از جمله APIهای پلتفرم یوتیوب، ارائه می‌دهند. این رویکرد، تجربه کاربری بسیار بهتری را برای کاربران برنامه اندروید شما نسبت به احراز هویت سفارشی با استفاده از ClientLogin فراهم می‌کند.

در دستگاه‌های iOS، گوگل دو گزینه ارائه می‌دهد:

  • Google+ Platform for iOS ، که ورود به سیستم برای محصولات گوگل را ادغام می‌کند و همچنین ویژگی‌های اجتماعی را فعال می‌کند.
  • gtm-oauth2 toolkit که یک UIWebView احراز هویت ارائه می‌دهد و توکن‌ها را مدیریت می‌کند.

برای دستگاه‌هایی که قرار است به عنوان دستگاه‌های «صفحه نمایش دوم» عمل کنند یا دستگاه‌هایی مانند تلویزیون که مکانیسم‌های ورودی آسان برای استفاده ندارند، OAuth 2.0 برای دستگاه‌ها رویکرد ارجح است. OAuth 2.0 برای دستگاه‌ها با ارائه یک کد منحصر به فرد برای کاربر در صورت نیاز به درخواست مجوز کار می‌کند. در این مرحله، از کاربران خواسته می‌شود تا در دستگاه دیگری مانند لپ‌تاپ یا تلفن به http://google.com/device مراجعه کرده و کد منحصر به فرد را وارد کنند. برنامه صفحه‌ای را ارائه می‌دهد که چیزی شبیه به این است:

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

خلاصه

مجوز OAuth 2.0 انعطاف‌پذیری را برای توسعه‌دهندگانی که به مجوز YouTube نیاز دارند، فراهم می‌کند. توسعه‌دهندگانی که با ClientLogin آشنا هستند، ممکن است دریابند که راه‌اندازی برنامه‌هایشان برای استفاده از OAuth 2.0 برای شروع کمی بیشتر نیاز دارد، اما پس از انتقال، برنامه‌های OAuth 2.0 انعطاف‌پذیری، امنیت و قابلیت استفاده بیشتری را در چندین پلتفرم برای کاربران نهایی ارائه می‌دهند.

اگر در مورد OAuth 2.0 یا هر یک از مثال‌های این مقاله سؤال دیگری دارید، لطفاً با استفاده از تگ youtube-api در StackOverflow بپرسید.