استفاده از OAuth با Google Data API

اریک بیدلمن، تیم Google Data APIs
سپتامبر 2008

معرفی

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

اخیراً، همه APIهای Google Data از OAuth پشتیبانی کردند، یک پروتکل باز که هدف آن استاندارد کردن روش دسترسی برنامه‌های دسکتاپ و وب به داده‌های خصوصی کاربر است. OAuth ابزاری برای انجام احراز هویت API به شیوه ای استاندارد و ایمن فراهم می کند. به عنوان برنامه نویس، به ما آموزش داده شده است که تا جایی که ممکن است دوباره از کد استفاده کنیم. OAuth به توسعه دهندگان کمک می کند تا میزان کدهای تکراری را که می نویسند کاهش دهند و ایجاد ابزارهایی را که با چندین سرویس از ارائه دهندگان مختلف کار می کنند آسان تر می کند.

حضار

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

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


کمی اصطلاحات

درک OAuth همه چیز در مورد درک اصطلاحات آن است. مشخصات OAuth و اسناد تأیید اعتبار OAuth Google برای برنامه های کاربردی وب به شدت به تعاریف خاصی متکی هستند، بنابراین اجازه دهید توضیح دهیم که هر کدام در زمینه پیاده سازی OAuth گوگل چه معنایی دارند.

  1. "رقص OAuth"

    اصطلاح غیر رسمی من برای توصیف فرآیند احراز هویت/مجوز کامل OAuth.

  2. (OAuth) درخواست رمز

    یک نشانه اولیه که به Google اجازه می‌دهد بداند برنامه شما درخواست دسترسی به یکی از APIهای Google Data را دارد. مرحله دوم رقص OAuth این است که کاربر به صورت دستی به داده های خود دسترسی دهد. اگر این مرحله موفقیت آمیز باشد، رمز درخواست مجاز می شود.

  3. (OAuth) نشانه دسترسی

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

    شباهت به AuthSub:
    یک نشانه دسترسی OAuth همان رمز جلسه ایمن AuthSub است.

  4. (OAuth) نقاط پایانی

    اینها URIهایی هستند که برای احراز هویت یک برنامه و به دست آوردن یک نشانه دسترسی مورد نیاز هستند. در مجموع سه مورد وجود دارد - یکی برای هر مرحله از فرآیند OAuth. نقاط پایانی OAuth Google عبارتند از:

    دریافت رمز درخواست: https://www.google.com/accounts/OAuthGetRequestToken
    مجوز درخواست رمز: https://www.google.com/accounts/OAuthAuthorizeToken
    ارتقا به یک نشانه دسترسی: https://www.google.com/accounts/OAuthGetAccessToken

    شباهت به AuthSub:
    مبادله یک نشانه درخواست مجاز برای یک نشانه دسترسی مشابه ارتقاء یک توکن AuthSub یکبار مصرف به یک نشانه جلسه طولانی مدت در https://www.google.com/accounts/AuthSubRequestToken و https://www.google.com/accounts/AuthSubSessionToken است. https://www.google.com/accounts/AuthSubSessionToken ، به ترتیب. تفاوت این است که AuthSub مفهوم توکن درخواست اولیه را ندارد. در عوض، کاربر فرآیند توکن را از صفحه مجوز AuthSubRequestToken شروع می کند.

  5. (OAuth) ارائه دهنده خدمات

    در مورد Google Data API، این ارائه دهنده Google است. به طور کلی، ارائه دهنده خدمات برای توصیف وب سایت یا وب سرویسی که نقاط پایانی OAuth را ارائه می دهد، استفاده می شود. نمونه دیگری از ارائه دهنده خدمات OAuth MySpace است.

  6. (OAuth) مصرف کننده

    برنامه درخواست مجوز برای دسترسی به داده های کاربر (یعنی برنامه شما). پروتکل OAuth از این جهت انعطاف پذیر است که به انواع مختلفی از کلاینت ها (وب، نصب شده، دسکتاپ، موبایل) اجازه می دهد.

توجه : اگرچه پروتکل OAuth از حالت استفاده از برنامه دسکتاپ/نصب شده پشتیبانی می کند، Google فقط از OAuth برای برنامه های وب پشتیبانی می کند.

شروع شدن

ثبت

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

امضای درخواست ها

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

درخواست نمونه

فهرستی از تقویم‌های Google کاربر را در http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime GET

قالب رشته پایه base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters
مثال رشته پایه GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime
نمونه درخواست HTTP
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1
Host:  http://www.google.com
Content-Type: application/atom+xml
Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0"

توجه : این فقط به عنوان نمایندگی است. oauth_signature شما بسیار طولانی تر خواهد بود.

نکات مربوط به رشته پایه:

  • پارامتر پرس و جو orderby=starttime همراه با بقیه پارامترهای oauth_* در ترتیب ارزش بایت واژگانی مرتب شده است.
  • این رشته همچنین حاوی "؟" نیست. شخصیت.
  • بخش base-http-request-url فقط حاوی نشانی اینترنتی پایه کدگذاری شده با URL است: http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull .
  • oauth_token با url دوتایی رمزگذاری شده است.

نکات مربوط به سربرگ Authorization :

  • ترتیب پارامترهای oauth_* در هدر Authorization مهم نیست.
  • سربرگ مانند رشته پایه شامل orderby=starttime نمی شود. آن پارامتر پرس و جو به عنوان بخشی از URL درخواست نگهداری می شود.

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

تفاوت با AuthSub:
به عنوان مقایسه، در اینجا همان مثال با استفاده از AuthSub امن است:

قالب رشته پایه base_string = http-method http-request-URL timestamp nonce
مثال رشته پایه
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d
نمونه درخواست HTTP
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1
Host:  http://www.google.com
Content-Type: application/atom+xml
Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1"

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

ابزار OAuth Playground

هدف

برخی از کاربران پیشنهاد کرده اند که OAuth منحنی یادگیری بالایی دارد. در مقایسه با دیگر APIهای احراز هویت گوگل، موافقم. مزیت OAuth زمانی آشکار خواهد شد که برنامه خود را برای استفاده از سایر خدمات (غیر Google) گسترش دهید. نوشتن یک تکه کد احراز هویت که در ارائه دهندگان خدمات مختلف و APIهای آنها کار می کند، به نظر من بسیار خوب است. بعداً از خودتان برای یادگیری این پروتکل تشکر خواهید کرد.

OAuth Playground ابزاری است که من برای کمک به توسعه دهندگان برای درمان مشکلات OAuth خود ایجاد کردم. می‌توانید از Playground برای کمک به اشکال‌زدایی، بررسی پیاده‌سازی خود یا آزمایش با Google Data API استفاده کنید.

چه کار میکند؟

  1. جریان احراز هویت OAuth را نشان می دهد: واکشی یک رمز درخواست، مجوز دادن به نشانه و ارتقاء آن به یک نشانه دسترسی.
  2. رشته پایه امضای صحیح را برای هر درخواست نمایش می دهد.
  3. سرصفحه Authorization صحیح را برای هر درخواست نمایش می دهد.
  4. نحوه استفاده از oauth_token را برای تعامل با فید Google Data تأیید شده نشان می دهد. شما می توانید داده ها را GET / POST / PUT / DELETE .
  5. یک فید احراز هویت شده را مستقیماً در مرورگر خود مشاهده کنید.
  6. به شما امکان می دهد oauth_consumer_key (دامنه ثبت شده شما) و کلید خصوصی خود را آزمایش کنید.
  7. کشف کنید که چه سرویس‌های فید Google Data در دسترس oauth_token شما هستند.

اجرای نسخه ی نمایشی

مرحله 1: محدوده(های) خود را انتخاب کنید

ابتدا، با انتخاب یک یا چند محدوده ، تصمیم بگیرید که از کدام API استفاده کنید. در این نمایش، من یک توکن درخواست می‌کنم که با Blogger و Google Contacts کار کند.

شباهت به AuthSub:
AuthSub همچنین به پارامتر scope برای کنترل محدوده داده هایی که یک نشانه می تواند به آن دسترسی داشته باشد نیاز دارد. Google این پارامتر را همانطور که در مشخصات OAuth پیشنهاد شده است پیاده سازی کرده است.

مرحله 2: پارامترها و تنظیمات OAuth را تغییر دهید

در حال حاضر، هیچ تنظیماتی را در کادر "تغییر پارامترهای OAuth" تغییر ندهید. بعداً می توانید با تغییر oauth_consumer_key به دامنه ثبت شده خود و وارد کردن کلید خصوصی خود با کلیک روی "استفاده از کلید خصوصی خود"، با کلید خصوصی خود تست کنید. لطفا فقط از کلید خصوصی TEST استفاده کنید.

توجه : oauth_signature_method و oauth_consumer_key تنها فیلدهایی هستند که در اینجا قابل ویرایش هستند. oauth_timestamp ، oauth_nonce ، و oauth_token به طور خودکار برای شما ایجاد می شود.

علاوه بر RSA-SHA1 ، می‌توانید از HMAC-SHA1 برای oauth_signature_method استفاده کنید. در آن صورت، Playground جعبه‌های دیگری را نشان می‌دهد که در آن باید oauth_consumer_key و راز مصرف‌کننده خود را وارد کنید. این مقادیر را می‌توانید در صفحه https://www.google.com/accounts/ManageDomains برای دامنه ثبت‌شده‌تان پیدا کنید.

تفاوت با AuthSub:
در AuthSub ایمن، هیچ پارامتری برای تنظیم صریح نام دامنه وجود ندارد. دامنه به عنوان بخشی از پارامتر URL next گنجانده شده است. چنین پارامتری در OAuth وجود دارد: oauth_consumer_key . آن را روی دامنه ثبت شده خود تنظیم کنید.

مرحله 3-5: رمز دسترسی را بدست آورید

سه مرحله برای دریافت نشانه دسترسی OAuth وجود دارد. اولین قدم بازیابی رمز درخواست است. این به Google اجازه می‌دهد بداند برنامه شما در حال شروع رقص OAuth است.

ابتدا روی دکمه «درخواست توکن» در کادر «دریافت توکن» کلیک کنید.

فیلدهای خاصی با داده ها پر می شوند.

  • "رشته پایه امضا" شکل مناسب رشته پایه مورد استفاده برای ایجاد پارامتر oauth_signature را نشان می دهد.
  • "Authorization header" عنوان Authorization مربوطه را برای درخواست نمایش می دهد.
  • کادر "تغییر پارامترهای OAuth" پر از مقادیر oauth_nonce و oauth_timestamp ارسال شده در درخواست است.
  • ورودی oauth_token با مقدار متناظر برگردانده شده در بدنه پاسخ پر شد. Playground همچنین نوع oauth_token ما را در حال حاضر نشان می دهد. در حال حاضر، این یک نشانه درخواست است.

بعد، روی دکمه "Authorize" در کادر "Get the Token" کلیک کنید.

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

شباهت به AuthSub:
این صفحه مجوز برای AuthSub یکسان است.

تفاوت با AuthSub:
پارامتر URL next AuthSub مشابه پارامتر oauth_callback است. تفاوت این است که در OAuth oauth_callback اختیاری است. پس از کلیک کاربر روی دکمه "اعطای دسترسی"، رمز درخواست مجاز می شود و ارتقاء نشانه به https://www.google.com/accounts/OAuthGetAccessToken می تواند به صورت ناهمزمان انجام شود.

نکته : اگر در حال نوشتن یک برنامه وب هستید، تعیین یک URL oauth_callback ترجیح داده می شود زیرا تجربه کاربری بهتری را ارائه می دهد.

در نهایت، روی دکمه "Access token" در کادر "Get the Token" کلیک کنید.

این اقدام نشانه درخواست مجاز را (همانطور که توسط برچسب قرمز رنگ «نشانه دسترسی» ذکر شده) ارتقا می‌دهد.

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

حالا می توانیم یک کار جالب انجام دهیم!

با استفاده از نشانه دسترسی

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

نکته : برای پیدا کردن فیدهایی که برای کد دسترسی شما در دسترس هستند، روی دکمه «فیدهای موجود» کلیک کنید.

یک نمونه پرس و جو در اینجا GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

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

مثال: چگونه یک پست را به روز کنیم

  1. عنصر <link> را با یک rel="edit" در پستی که می خواهید به روز کنید پیدا کنید. باید چیزی شبیه به:
    <link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
    باشد

    URL href را در ورودی «Enter a Google Data feed» جای‌گذاری کنید.

  2. XML ورودی موجود را با کلیک کردن روی "مشاهده ساده" در بالای پانل نحو برجسته کپی کنید. فقط بدنه پاسخ را کپی کنید نه هدرها.
  3. منوی کشویی روش HTTP را به PUT تغییر دهید.
  4. روی «ورود داده‌های پست» در زیر آن بازشو کلیک کنید و <entry> XML را در پنجره بازشو جای‌گذاری کنید.
  5. روی دکمه "اجرا" کلیک کنید.

سرور با 200 OK پاسخ خواهد داد.

نکته : به جای کپی دستی پیوند edit ، علامت «برجسته نحو؟» را بردارید. چک باکس پس از یک پرس و جو، می توانید روی پیوندهای موجود در بدنه های پاسخ XML کلیک کنید.

نتیجه

فناوری‌هایی مانند پروتکل انتشار AtomPub/Atom (پروتکل زیربنایی Google Data API ) و OAuth به پیشبرد وب کمک می‌کنند. همانطور که سایت های بیشتری شروع به پذیرش این استانداردها می کنند، ما توسعه دهندگان برنده هستیم. ایجاد یک برنامه قاتل ناگهان کمتر دلهره آور می شود.

اگر سؤال یا نظری در مورد OAuth Playground یا استفاده از OAuth با APIهای Google دارید، لطفاً از ما در انجمن پشتیبانی G Suite APIs و Marketplace APIs دیدن کنید.

منابع