سپتامبر 2008
معرفی
این یک زمان هیجان انگیز برای توسعه دهندگان است. ما در حال مشاهده تعدادی از استانداردهای باز در سراسر وب هستیم و همانطور که می دانید، گوگل همیشه طرفدار استانداردها بوده و جامعه منبع باز را تقویت می کند.
اخیراً، همه APIهای Google Data از OAuth پشتیبانی کردند، یک پروتکل باز که هدف آن استاندارد کردن روش دسترسی برنامههای دسکتاپ و وب به دادههای خصوصی کاربر است. OAuth ابزاری برای انجام احراز هویت API به شیوه ای استاندارد و ایمن فراهم می کند. به عنوان برنامه نویس، به ما آموزش داده شده است که تا جایی که ممکن است دوباره از کد استفاده کنیم. OAuth به توسعه دهندگان کمک می کند تا میزان کدهای تکراری را که می نویسند کاهش دهند و ایجاد ابزارهایی را که با چندین سرویس از ارائه دهندگان مختلف کار می کنند آسان تر می کند.
حضار
این مقاله فرض میکند که شما با یک یا چند API دادههای Google آشنا هستید، اما لزوماً با مفاهیم OAuth آشنا نیستید. اگر در حال شروع کار هستید، یا فقط در مورد OAuth کنجکاو هستید، به دنبال آن نباشید. این مقاله به شما یک پایه اساسی از مفاهیم می دهد. همچنین در مورد جزئیات پیاده سازی OAuth گوگل صحبت خواهم کرد.
این سند همچنین برای توسعه دهندگانی است که با استفاده از AuthSub آشنا هستند، به خصوص در حالت ثبت شده با حالت امنیتی پیشرفته . همانطور که پیش می رویم، سعی می کنم شباهت ها و تفاوت های بین این دو پروتکل را برجسته کنم. اگر برنامههایی دارید که از AuthSub استفاده میکنند، میتوانید از این اطلاعات برای مهاجرت به OAuth، که پروتکل بازتر و مدرنتری است، استفاده کنید.
کمی اصطلاحات
درک OAuth همه چیز در مورد درک اصطلاحات آن است. مشخصات OAuth و اسناد تأیید اعتبار OAuth Google برای برنامه های کاربردی وب به شدت به تعاریف خاصی متکی هستند، بنابراین اجازه دهید توضیح دهیم که هر کدام در زمینه پیاده سازی OAuth گوگل چه معنایی دارند.
- "رقص OAuth"
اصطلاح غیر رسمی من برای توصیف فرآیند احراز هویت/مجوز کامل OAuth.
- (OAuth) درخواست رمز
یک نشانه اولیه که به Google اجازه میدهد بداند برنامه شما درخواست دسترسی به یکی از APIهای Google Data را دارد. مرحله دوم رقص OAuth این است که کاربر به صورت دستی به داده های خود دسترسی دهد. اگر این مرحله موفقیت آمیز باشد، رمز درخواست مجاز می شود.
- (OAuth) نشانه دسترسی
آخرین مرحله رقص، مبادله توکن درخواست مجاز با یک توکن دسترسی است. هنگامی که برنامه شما این توکن را داشته باشد، کاربر دیگر نیازی به رقص OAuth نخواهد داشت، مگر اینکه توکن باطل شود.
شباهت به AuthSub:
یک نشانه دسترسی OAuth همان رمز جلسه ایمن AuthSub است. - (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
شروع می کند. - (OAuth) ارائه دهنده خدمات
در مورد Google Data API، این ارائه دهنده Google است. به طور کلی، ارائه دهنده خدمات برای توصیف وب سایت یا وب سرویسی که نقاط پایانی OAuth را ارائه می دهد، استفاده می شود. نمونه دیگری از ارائه دهنده خدمات OAuth MySpace است.
- (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 استفاده کنید.
چه کار میکند؟
- جریان احراز هویت OAuth را نشان می دهد: واکشی یک رمز درخواست، مجوز دادن به نشانه و ارتقاء آن به یک نشانه دسترسی.
- رشته پایه امضای صحیح را برای هر درخواست نمایش می دهد.
- سرصفحه
Authorization
صحیح را برای هر درخواست نمایش می دهد. - نحوه استفاده از
oauth_token
را برای تعامل با فید Google Data تأیید شده نشان می دهد. شما می توانید داده ها راGET
/POST
/PUT
/DELETE
. - یک فید احراز هویت شده را مستقیماً در مرورگر خود مشاهده کنید.
- به شما امکان می دهد
oauth_consumer_key
(دامنه ثبت شده شما) و کلید خصوصی خود را آزمایش کنید. - کشف کنید که چه سرویسهای فید Google Data در دسترس
oauth_token
شما هستند.
اجرای نسخه ی نمایشی
مرحله 1: محدوده(های) خود را انتخاب کنیدابتدا، با انتخاب یک یا چند محدوده ، تصمیم بگیرید که از کدام API استفاده کنید. در این نمایش، من یک توکن درخواست میکنم که با Blogger و Google Contacts کار کند. شباهت به AuthSub: | |
مرحله 2: پارامترها و تنظیمات OAuth را تغییر دهید در حال حاضر، هیچ تنظیماتی را در کادر "تغییر پارامترهای OAuth" تغییر ندهید. بعداً می توانید با تغییر توجه : علاوه بر تفاوت با AuthSub: | |
مرحله 3-5: رمز دسترسی را بدست آوریدسه مرحله برای دریافت نشانه دسترسی OAuth وجود دارد. اولین قدم بازیابی رمز درخواست است. این به Google اجازه میدهد بداند برنامه شما در حال شروع رقص OAuth است. ابتدا روی دکمه «درخواست توکن» در کادر «دریافت توکن» کلیک کنید. فیلدهای خاصی با داده ها پر می شوند.
| |
بعد، روی دکمه "Authorize" در کادر "Get the Token" کلیک کنید. در این صفحه مجوز، روی دکمه «اعطای دسترسی» کلیک کنید تا رمز درخواست تأیید شود و به زمین بازی OAuth هدایت شوید. شباهت به AuthSub: تفاوت با AuthSub: نکته : اگر در حال نوشتن یک برنامه وب هستید، تعیین یک URL | |
در نهایت، روی دکمه "Access token" در کادر "Get the Token" کلیک کنید. این اقدام نشانه درخواست مجاز را (همانطور که توسط برچسب قرمز رنگ «نشانه دسترسی» ذکر شده) ارتقا میدهد. اگر میخواهید یک توکن جدید دریافت کنید، روی «شروع دوباره» کلیک کنید تا رقص OAuth دوباره شروع شود. حالا می توانیم یک کار جالب انجام دهیم! |
با استفاده از نشانه دسترسی
اکنون آماده پرس و جو کردن فیدها، درج، به روز رسانی یا حذف داده ها هستید. لطفاً هنگام اجرای این سه روش آخر HTTP مراقب باشید زیرا با داده های واقعی خود کار می کنید!
نکته : برای پیدا کردن فیدهایی که برای کد دسترسی شما در دسترس هستند، روی دکمه «فیدهای موجود» کلیک کنید.
یک نمونه پرس و جو در اینجا GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3
این مثال بیش از سه پست را در یک وبلاگ خاص برمی گرداند. همچنین میتوانید با کلیک روی پیوند «مشاهده در مرورگر» در زیر ناحیه برجستهشده نحو، فید/مدخل بازگشتی را مستقیماً در مرورگر خود مشاهده کنید.
مثال: چگونه یک پست را به روز کنیم
- عنصر
<link>
را با یک rel="edit" در پستی که می خواهید به روز کنید پیدا کنید. باید چیزی شبیه به:<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
باشدURL href را در ورودی «Enter a Google Data feed» جایگذاری کنید.
- XML ورودی موجود را با کلیک کردن روی "مشاهده ساده" در بالای پانل نحو برجسته کپی کنید. فقط بدنه پاسخ را کپی کنید نه هدرها.
- منوی کشویی روش HTTP را به
PUT
تغییر دهید. - روی «ورود دادههای پست» در زیر آن بازشو کلیک کنید و
<entry>
XML را در پنجره بازشو جایگذاری کنید. - روی دکمه "اجرا" کلیک کنید.
سرور با 200 OK
پاسخ خواهد داد.
نکته : به جای کپی دستی پیوند edit
، علامت «برجسته نحو؟» را بردارید. چک باکس پس از یک پرس و جو، می توانید روی پیوندهای موجود در بدنه های پاسخ XML کلیک کنید.
نتیجه
فناوریهایی مانند پروتکل انتشار AtomPub/Atom (پروتکل زیربنایی Google Data API ) و OAuth به پیشبرد وب کمک میکنند. همانطور که سایت های بیشتری شروع به پذیرش این استانداردها می کنند، ما توسعه دهندگان برنده هستیم. ایجاد یک برنامه قاتل ناگهان کمتر دلهره آور می شود.
اگر سؤال یا نظری در مورد OAuth Playground یا استفاده از OAuth با APIهای Google دارید، لطفاً از ما در انجمن پشتیبانی G Suite APIs و Marketplace APIs دیدن کنید.