حسین سلیمانی
حسین سلیمانی
خواندن ۴ دقیقه·۹ ماه پیش

مفاهیم OAuth2 و Open ID connect به صورت خلاصه


بسم الله الرحمن الرحیم

پروتکل OAuth 2 چیست؟

به صورت خلاصه OAuth2 یه دسترسی محدود به اکانت شما رو به برنامه های دیگه میده.بذارید یه مثال بزنم.

مثال :

یه برنامه ایی هست به اسم "اتو ایمیل "این برنامه یه لیستی از ایمیل ها رو میگره و به صورت گروهی برای اعضای این لیست ایمیل می فرسته. مثلا اگه بخواید به تمام همکارهاتون یه ایمیل تبریک سال نو بفرسید لیست ایمیل همه رو توی این برنامه وارد می کنید و به صورت گروهی ایمیل می فرستید .

حالا اگه شما هم مثل من حال نداشته باشید همه ایمیل ها رو تک تک وارد کنید, این برنامه میتونه به حساب جیمیل شما وصل بشه و خودش ایمیل تمام همکاری شما رو استخراج کنه.به روشی که برنامه "اتو ایمیل " به حساب جیمل شما وصل میشه OAuth 2 میگن .

اما دقیقا چطور کار میکنه :

وقتی شما دکمه وصل کردن برنامه "اتو ایمیل " به جیمل رو میزنید شما رو میفرسته به authorization server. داخل authorization server هویت شما با وارد کردن رمز و نام کاربری تایید میشه .بعدش از اینکه هویت شما تایید شد صفحه ایی به شما نمایش داده میشه که مشخص میکنه چه دسترسی هایی میخواهید به برنامه "اتو ایمیل" بدهید. مثلا شما دسترسی به تمام مخاطبان جیمل را به برنامه "اتو ایمیل" تایید می کنید .

در مرحله بعد authorization server شما را به همراه یک authorization code به صفحه مخصوصی در سایت "اتو ایمیل" می فرستد . authorization code یک کد موقت است.

از اینجا بعد بعد سرور های "اتو ایمیل" بدون نیاز به شما با سرور های جیمیل ارتباط برقرار می کنند .ابتدا کدی که در محله قبل دریافت شده به اضافه ایدی شما و سکرت شما را به authorization server ارسال می کند.authorization server بعد از تایید اطلاعات یک Access Token به سرور "اتو ایمیل" می فرستد.

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

ولی Open ID Connect (OIDC) چیه:

این پروتکل یکسری ویژگی ها به OAuth2 اضافه میکند .در OAuth2 فقط اجازه استفاده از یکسری از داده ها به برنامه های مختلف داده می شود ولی با استفاده از OIDC اطلاعات هوییتی نیز ارسال می شود مثلا اگر با استفاده از اکانت گوگل وارد حساب کاربری ویروگل خودتون میشید گوگل بر اساس همین OIDC یکسری از اطلاعات هویتی شما رو برای ویرگول میفرسته و ویرگول با استفاده از همون اطلاعات یک اکانت برای شما میسازه.

این اطلاعات از طریق فرمتی به اسم jwt یا همون Json Web Token ارسال میشه میشه.

اما JWT چییست :

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

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

بعضی از اصطلاحات مربوطه :

ا-resource owner : کسی که صاحب اطلاعات است .مثلا شما که یک کانال یوتیوب دارید یک resource owner محسوب می شوید.

ا- client : نرم افزار سوم شخصی که نیاز به دسترسی به اطلاعات شما دارد مثلا برنامه ایی که برای کار کردن باید قابلیت دسترسی به ویدو های یویتوب شما و ایجاد تغییرات در آنها را داشته باشد .

ا- authorization server : نرم افزاری که شما را میشناسد و اطلاعات اکانت شما را دارد. client باید از authorization server مجوز دسترسی به اطلاعات شما را بگیرد.

ا- resource server : جایی که اطلاعات شما ذخیره شده است مثلا سرور های گوگل که ویدو های شما در آنجا قرار دارد. client بعد از گرفتن مجوز از authorization server میتواند به resource server متصل شود .

ا-redirect uri :بعد از اینکه authorization server کاربر را تایید با استفاده از یک ادرس به نام redirect uri کاربر یا همان resource owner به صفحه client باز میگرداند .

ا- response type : فرمت جوابی که client انتظار دارد دریافت کند.

ا- scope : به اجازه هایی که client به انها نیاز دارد می گویند مثلا دسترسی به مخاطبین یا عکس ها .

ا-consent : عملیاتی که شما به عنوان resource owner باید مجوز هایی که client درخواست کرده را تایید کنید.

برای اطلاعات بیشتر :
An Illustrated Guide to OAuth and OpenID Connect
jwt token
صفحه من در یوتیوب
jwt tokenهک و امنیتسیستم احراز هویت کاربرانپروتکل امنیتیامنیت وب
برنامه نویس hossien014.github.io
شاید از این پست‌ها خوشتان بیاید