زمینه
این سند ویژگیهای مورد نیاز برای شناسههای مشترکی را که در ادغام بین Google و فروشنده (یا صادرکننده حساب کاربر) استفاده میشوند، پوشش میدهد. یک راه خوب برای فکر کردن در مورد یک شناسه مشترک این است که یک نشانگر غیر شفاف به لبه بین حساب Google و حساب صادرکننده است.
بنابراین، مهم است که به خاطر داشته باشید که شناسه مشترک به حساب Google (یا کاربر یا نهاد دیگری در فضای ذخیرهسازی Google) و نه به حساب فروشنده/صادرکننده (یا نهاد دیگر) اشاره نمیکند. به پیوند این دو اشاره دارد.
ویژگی های شناسه مشترک
ویژگیهایی که برای شناسههای مشترک مورد نیاز است، ناشی از تجربیات گذشته و مسائل فنی است که در نتیجه فقدان این ویژگیها در شناسههای مشترک با آنها مواجه شدهاند.
برای ادغام بین Google و یک شریک خارجی، بسیار مهم است که شناسههای مشترک مورد استفاده دارای ویژگیهای زیر باشند:
- جهانی منحصر به فرد باشید: این شناسه مشترک باید دقیقاً به یک پیوند بین یک کاربر Google و یک حساب صادرکننده اشاره کند. نباید شناسه مشترک دیگری برای همان صادرکننده وجود داشته باشد که دارای همان مقدار باشد.
- غیرقابل حدس زدن باشید: این شناسه های مشترک دارای مجوز انجام اقدام از طرف کاربر هستند، بنابراین مهم است که شخص ثالث نتواند مقدار شناسه مشترک را حدس بزند.
- قابل برگشت باشد: مهم است که یک شناسه مشترک ممکن است توسط کاربر باطل شود و این ابطال باید هرگونه استفاده آینده از مقدار شناسه مشترک را ممنوع کند. این ویژگی دارای چند ویژگی است که به شرح زیر است:
- بر اساس ویژگی تغییرناپذیر هر یک از حسابها: اگر ارزش شناسه مشترک براساس ویژگی غیرقابل تغییر حساب صادرکننده یا حساب Google باشد، آنگاه ایجاد مجدد یک شناسه اشتراکگذاری شده باطل شده، به همان ارزش آن مشترک میانجامد. شناسه (در نتیجه لغو لغو می شود)، بنابراین مقدار شناسه مشترک نباید یکی از ویژگی های حساب باشد (مثلاً نباید شماره تلفن یا هش شماره تلفن باشد).
- صرفاً <حساب Google، حساب شریک> نباشد: باید مقدار دیگری (مثلاً زمان) وجود داشته باشد تا امکان لغو وجود داشته باشد.
- اجازه دادن چندین پیوند برای حساب در هر طرف: مهم است که ایجاد ارزش شناسه مشترک، پیوند دادن یک کاربر Google به چندین حساب بانکی یا پیوند بیش از یک حساب Google را به یک حساب بانکی غیرممکن کند ( به عنوان مثال یک حساب والدین و یک فرزند که هر دو به حساب بانکی والدین مرتبط هستند). مشابه ابطال پذیری، این چند نتیجه دارد:
- باز هم، نه بر اساس ویژگی تغییرناپذیر هر یک از حسابها: در غیر این صورت، وقتی یک کاربر Google چندین حساب بانکی را پیوند میداد (اگر ارزش شناسه مشترک بر اساس حساب Google باشد) یا اگر چندین حساب Google با آن پیوند داده شده باشد، شناسه مشترک دارای ارزش یکسانی خواهد بود. یک حساب بانکی واحد (اگر ارزش شناسه مشترک بر اساس ویژگی حساب بانکی باشد)
- ماندگار باشید: شناسه مشترک فقط در یک زمینه امن معتبر است (ادغام بین Google و فروشنده، که از حفاظت در سطح اتصال و سطح برنامه (مانند PGP، SSL متقابل و غیره) استفاده می کند، بنابراین این کار را نمی کند. برای ایمن ماندن به چرخههای عمر کوتاهی نیاز دارید. ترجیح Google این است که شناسههای مشترک هرگز منقضی نمیشوند، اما اگر فروشندهای نیاز به انقضا داشته باشد، باید یک دوره زمانی طولانی باشد (مثلاً > ۱ سال).
سایر ویژگی های شناسه مشترک که توصیه می شود به شرح زیر است:
- Base64: این امر انتقال و انتقال ارزش در ادغام را از طریق https آسان می کند.
- حداقل طول: حداقل 27 رقم (قبل از رمزگذاری Base64) توصیه می شود تا اطمینان حاصل شود که فضای آدرس زیادی برای جلوگیری از برخورد وجود دارد.
چه چیزی می تواند اشتباه باشد؟
برای کمک به خواننده در درک ویژگی های مورد نیاز، این چند مطالعه موردی است که مشکلاتی را که در صورت عدم رعایت این ویژگی ها با آن مواجه می شود را نشان می دهد.
مطالعات موردی شناسه مشترک
مطالعه موردی شماره 1: بازیافت شماره تلفن
صادرکننده ای که از شماره تلفن کاربر به عنوان شناسه مشترک آنها استفاده کرده است. وقتی کاربر A برنامه های تلفن خود را تغییر داد، شماره تلفن خود را رها کردند و شماره تلفن جدیدی دریافت کردند. یک ماه بعد، شرکت تلفن شماره تلفن قدیمی را بازیافت کرد و ناگهان مالک جدید شماره تلفن، کاربر B، شروع به مشاهده هزینههایی از حساب خود برای چیزهایی کرد که نمیخریدند.
صادرکننده بسیاری از ویژگی های شناسه مشترک، عمدتاً دارایی شماره 1 را نقض کرده بود. چیزهایی مانند شماره تلفن می توانند از کاربر به کاربر دیگر منتقل شوند، بنابراین فقط در یک عکس فوری خاص در زمان منحصر به فرد هستند.
مطالعه موردی شماره 2: خمیر
یک کارمند Google/Partner بهطور تصادفی یک شناسه مشترک را بهجای ابزار داخلی در چت جایگذاری میکند. لایههای حفاظتی اضافی مانع از استفاده مخرب هر کسی از شناسه مشترک میشود، اما برای ایمن بودن، Google میخواست شناسه مشترک را لغو کند و آن را با یک شناسه جدید جایگزین کند. وقتی Google/Partner سعی میکند شناسه مشترک را باطل کند، متوجه میشود که شناسههای مشترک فقط شناسه حساب کاربر در سیستم صادرکننده است و از شناسه مشترک برای جستجوی مستقیم حساب کاربر استفاده میشود. بنابراین شناسه مشترک بدون حذف حساب کاربری و ایجاد یک حساب جدید برای آنها قابل لغو نیست.
مطالعه موردی شماره 3: کارمند بد
پس از حادثه «جایگزینی» در بالا، یک بازیگر بد در Google/Partner متوجه میشود که از آنجایی که شناسه مشترک فقط شناسه حساب کاربر است، اگر بتواند شناسه حساب شخص دیگری را در ارزش شناسه مشترک خودش قرار دهد، میتواند در مقابل آن خرید انجام دهد. حساب آن شخص دیگر نقض Property #2 باعث شده است که این خمیر ناخواسته بیش از یک حفره امنیتی برای یک کاربر باشد -- این یک حفره امنیتی برای هر کاربر است.
مطالعه موردی شماره 4: چرخش
پس از «جایگزینی» در بالا، صادرکننده به یک UUID بهعنوان قالب شناسه مشترک خود تغییر میکند. این بار، یکی از کارمندان صادرکننده به اشتباه برخی از شناسه های مشترک را به صورت متن ساده به عنوان بخشی از یک رشته ایمیل اشکال زدایی ایمیل می کند. گوگل می گوید، نگران نباشید ما فقط شناسه های مشترک کاربر را لغو و جایگزین می کنیم.
به عنوان بخشی از چرخش، Google به صادرکننده می گوید که هر حساب کاربری در معرض خطر دو شناسه مشترک برای مدت کوتاهی فعال خواهد بود، در حالی که پاکسازی پایگاه داده در حال انجام است. اما صادرکننده ویژگی شماره 4 را مجاز نکرده است و به Google میگوید که محدودیتی دارد که تنها یک شناسه مشترک میتواند برای یک حساب کاربری خاص فعال باشد. این منجر به یک چرخش بسیار کثیف با شرایط مسابقه می شود.