درباره توکنهای تازهسازی و نحوه کمک به توسعهدهندگان به تعادل امنیت و قابلیت استفاده در برنامههایشان بیاموزید.
دن آریاس
مهندس محتوای تحقیق و توسعه
سام بلن
مهندس وکیل توسعه دهنده ارشد
آخرین به روز رسانی در: 07 اکتبر 2021
Auth0 Marketplace ادغام هایی را که برای حل هویت نیاز دارید، کشف و فعال کنید
این پست مفهوم نشانههای تازهسازی را همانطور که توسط OAuth 2. 0 تعریف شده است بررسی میکند. ما یاد خواهیم گرفت که چگونه آنها را با انواع دیگر توکن مقایسه می کنند و چگونه به ما اجازه می دهند امنیت، قابلیت استفاده و حریم خصوصی را متعادل کنیم.
میتوانید متن این پست را دنبال کنید، یا اگر ترجیح میدهید از ارائهها یاد بگیرید، میتوانید ویدیوی همراه این مقاله را تماشا کنید:
توکن چیست؟
توکنها قطعاتی از دادهها هستند که اطلاعات کافی برای تسهیل فرآیند تعیین هویت کاربر یا اجازه دادن به کاربر برای انجام یک عمل را دارند. در مجموع، توکنها مصنوعاتی هستند که به سیستمهای برنامه اجازه میدهند فرآیند مجوز و احراز هویت را انجام دهند.
چارچوبها و پروتکلهای هویت رایج از استراتژیهای مبتنی بر توکن برای دسترسی امن به برنامهها و منابع استفاده میکنند. به عنوان مثال، می توانیم از OAuth 2. 0 برای مجوز و OIDC برای احراز هویت استفاده کنیم.
OAuth 2. 0 یکی از محبوب ترین چارچوب های مجوز موجود است. این برنامه به گونه ای طراحی شده است که به یک برنامه اجازه می دهد به منابع میزبانی شده توسط سرورهای دیگر از طرف یک کاربر دسترسی داشته باشد. OAuth 2. 0 از توکنهای Access و Refresh Tokens استفاده میکند.
OpenID Connect (OIDC) یک پروتکل هویتی است که احراز هویت کاربر، رضایت کاربر و صدور توکن را انجام می دهد. OIDC از شناسه توکن ها استفاده می کند.
آیا می خواهید با OAuth2 و OpenID Connect سرعت خود را افزایش دهید؟
بیایید سه نوع توکن را که با OAuth 2. 0 و OpenID Connect برای انجام فرآیندهای احراز هویت و مجوز سیستم های برنامه کاربردی خود استفاده می کنیم، بررسی کنیم. در این فرآیند، نقش حیاتی توکنهای بهروزرسانی را در کمک به توسعهدهندگان برای ساخت برنامههایی که راحتی را بدون به خطر انداختن امنیت ارائه میکنند، خواهیم دید.
انواع توکن
شناسه شناسه چیست؟
همانطور که از نام ممکن است نشان دهد، یک نشانه شناسه مصنوع است که برنامه های کاربردی مشتری می توانند از آن برای مصرف هویت کاربر استفاده کنند. به عنوان مثال، رمز شناسه میتواند حاوی اطلاعاتی درباره نام، ایمیل و تصویر نمایه یک کاربر باشد. به این ترتیب، برنامه های مشتری می توانند از رمز شناسه برای ساختن یک نمایه کاربری برای شخصی سازی تجربه کاربر استفاده کنند.
یک سرور تأیید اعتبار که مطابق با پروتکل OpenID Connect (OIDC) برای اجرای فرآیند تأیید اعتبار است ، هر زمان که کاربر وارد سیستم شود ، مشتری خود را به یک شناسه شناسه می رساند. برنامه های کاربردی. آنها مخاطب مورد نظر هستند.
نشانه دسترسی چیست؟
هنگامی که یک کاربر وارد سیستم می شود ، سرور مجوز یک نشانه دسترسی را صادر می کند ، که مصنوعی است که برنامه های مشتری می توانند از آنها برای برقراری تماس های ایمن به یک سرور API استفاده کنند. هنگامی که یک برنامه مشتری به نمایندگی از کاربر نیاز به دسترسی به منابع محافظت شده از سرور دارد ، نشانه دسترسی به سیگنال مشتری به سرور اجازه می دهد که توسط کاربر مجوز دریافت کرده است تا کارهای خاصی را انجام دهد یا به منابع خاصی دسترسی پیدا کند.
OAUTH 2. 0 فرمی را برای نشانه های دسترسی تعریف نمی کند. به عنوان مثال ، در AUTH0 ، Access Tokens صادر شده برای API مدیریت و Access Tokens صادر شده برای هر API سفارشی که در Auth0 ثبت نام کرده اید ، استاندارد JSON Web Token (JWT) را دنبال کنید. ساختار اساسی آنها با ساختار معمولی JWT مطابقت دارد ، و آنها حاوی ادعاهای استاندارد JWT هستند که در مورد خود نشانه ادعا شده است.
آیا علاقه مند هستید که در اسرع وقت با JWTS به سرعت برسید؟
این محتوای یک نشانه دسترسی رمزگشایی شده است که از قالب JWT پیروی می کند:
مهم است که برجسته شود که نشانه دسترسی یک نشانه حامل است. کسانی که نشانه را نگه می دارند می توانند از آن استفاده کنند. سپس نشانه دسترسی به عنوان یک مصنوعات معتبر برای دسترسی به منابع محافظت شده به جای یک مصنوعات شناسایی عمل می کند. کاربران مخرب می توانند از نظر تئوری یک سیستم را به خطر بیاندازند و نشانه های دسترسی را به سرقت برده اند ، که به نوبه خود می توانند با ارائه مستقیم آن نشانه ها به سرور ، از آنها برای دسترسی به منابع محافظت شده استفاده کنند.
به همین ترتیب ، داشتن استراتژی های امنیتی بسیار مهم است که خطر به خطر انداختن نشانه های دسترسی را به حداقل می رساند. یک روش کاهش ایجاد نشانه های دسترسی که طول عمر کوتاهی دارند: آنها فقط برای مدت کوتاهی از نظر ساعت ها یا روزها معتبر هستند.
روش های مختلفی وجود دارد که یک برنامه مشتری می تواند یک نشانه دسترسی جدید برای کاربر دریافت کند. به عنوان مثال ، پس از اتمام یک نشانه دسترسی ، برنامه مشتری می تواند کاربر را وادار کند تا دوباره وارد سیستم شود تا یک نشانه دسترسی جدید دریافت کند. از طرف دیگر ، سرور مجوز می تواند یک نشانه تازه به برنامه مشتری صادر کند که به آن اجازه می دهد یک نشانه دسترسی منقضی شده را با یک مورد جدید جایگزین کند.
شما می توانید در هر یک از "راهنماهای کامل برای احراز هویت کاربر" که برای React ، Angular ، Vue و Node. js موجود است ، هر دو نشانه شناسه و به نشانه های دسترسی را مشاهده کنید!
نشانه تازه سازی چیست؟
همانطور که گفته شد ، برای اهداف امنیتی ، ممکن است برای مدت زمان کوتاهی معتبر باشد. پس از انقضا ، برنامه های مشتری می توانند از یک نشانه تازه برای "تازه کردن" نشانه دسترسی استفاده کنند. یعنی ، یک نشانه تازه یک اثر معتبر است که به یک برنامه مشتری اجازه می دهد تا بدون نیاز به کاربر از کاربر ، به نشانه های دسترسی جدید دسترسی پیدا کند.
در نمودار بالا ، SPA = برنامه تک صفحه ای ؛as = سرور مجوز ؛RS = سرور منبع ؛در = نشانه دسترسی ؛RT = توکن تازه کردن.
برنامه مشتری می تواند یک نشانه دسترسی جدید را تا زمانی که توکن تازه سازی معتبر و غیرقابل استفاده باشد ، دریافت کند. در نتیجه ، یک نشانه تازه که طول عمر بسیار طولانی دارد ، می تواند از نظر تئوری قدرت بی نهایت را به Token Bearer بدهد تا یک نشانه دسترسی جدید برای دسترسی به منابع محافظت شده در هر زمان بدست آورد. حامل نشانه Refresh می تواند یک کاربر قانونی یا یک کاربر مخرب باشد. به این ترتیب ، شرکت های امنیتی ، مانند AUTH0 ، سازوکارهایی ایجاد می کنند تا اطمینان حاصل کنند که این نشانه قدرتمند عمدتاً توسط احزاب مورد نظر به طور مداوم مورد استفاده قرار می گیرد و به طور مداوم مورد استفاده قرار می گیرد.
چه موقع از نشانه های تازه استفاده کنید
این مهم است که در نظر داشته باشید که مشخصات OAUTH 2. 0 نشانه های دسترسی را تعریف می کند و نشانه های تازه را تعریف می کند. بنابراین ، اگر بخواهیم از نظر سایر پروتکل ها یا چارچوب های هویت ، مانند SAML ، در مورد استراتژی های مجوز بحث کنیم ، مفاهیم نشانه های دسترسی یا نشانه های تازه را نخواهیم داشت.
برای کسانی که درگیر توسعه وب هستند ، نشانه های دسترسی و نشانه های تازه ای صحبت مشترک هستند زیرا وب به طور گسترده از مجوز و احراز هویت مبتنی بر توکن از طریق چارچوب OAUTH 2. 0 و پروتکل OpenID Connect استفاده می کند.
هنگامی که ترکیب می شوند ، OAUTH 2. 0 و OIDC مجموعه ای از مجوز و احراز هویت را به زندگی می آورند. هر جریان دارای مجموعه ای از مزایا و احتیاط های خاص خود است که بهترین سناریوها و معماری را در جایی که باید از نشانه های دسترسی و تازه کردن استفاده کنیم ، تعریف می کند.
آیا مشتری یک برنامه وب سنتی است که روی سرور اجرا می شود؟از جریان کد مجوز استفاده کنید.
آیا مشتری یک برنامه تک صفحه ای (SPA) است که نیازی به نشانه دسترسی ندارد؟از جریان ضمنی با فرم فرم استفاده کنید.
آیا مشتری صاحب منبع است؟ممکن است از جریان اعتبار مشتری استفاده کنید.
آیا مشتری کاملاً به اعتبار کاربر اعتماد دارد؟شما می توانید از جریان رمز عبور منبع منابع استفاده کنید.
اگر برنامه ای برای آن وجود داشته باشد ، یک جریان برای آن نیز وجود دارد!
به خاطر داشته باشید که طبق مشخصات ، هنگام استفاده از جریان ضمنی ، سرور مجوز نباید نشانه های تازه سازی را صادر کند. جریان ضمنی اغلب در برنامه های تک صفحه ای (SPA) اجرا می شود ، که روی لایه جلوی معماری سیستم اجرا می شوند. هیچ راه آسانی برای ایمن نگه داشتن یک نشانه تازه در لایه جلوی خود به تنهایی وجود ندارد.
با استفاده از جریان کد مجوز با کلید اثبات برای Exchange Code (PKCE) بسیاری از خطرات ذاتی جریان ضمنی را کاهش می دهد. به عنوان مثال ، هنگام استفاده از نوع کمک هزینه ضمنی ، نشانه دسترسی در قطعه URI منتقل می شود ، که می تواند آن را در معرض احزاب غیرمجاز قرار دهد. با خواندن "سوء استفاده از نشانه دسترسی به جعل هویت صاحب منابع در جریان ضمنی" از مشخصات می توانید اطلاعات بیشتری در مورد این آسیب پذیری ها کسب کنید.
با این حال ، اجرای PKCE در برنامه های شما هنوز هیچ تاثیری در چگونگی Secure Refresh Tokens ندارد.
با این حال ، شما ممکن است نیازی به نشانه های تازه سازی نداشته باشید.
سناریوهایی وجود دارد که شما هنوز هم می توانید یک نشانه دسترسی دریافت کنید بدون اینکه کاربر را قطع کنید و بدون تکیه بر قدرت متعال نشانه تازه سازی. نمونه های دیگر برای ادامه جلسه می تواند کوکی یا احراز هویت خاموش باشد.
با این حال ، میلیاردها نفر هر روز از اسپا استفاده می کنند. مهم است که یک تجربه کاربر را در اختیار کاربران قرار دهیم که امنیت و راحتی را به خوبی تعادل برقرار کند. آیا کاری وجود دارد که بتوانیم انجام دهیم تا اسپا ها بتوانند به راحتی و با ریسک تر و ایمن تر ، نشانه های تازه سازی را فراهم کنیم؟
یک بستر هویتی که چرخش توکن را ارائه می دهد ، استفاده از نشانه های تازه با برنامه های تک صفحه ای را قابل قبول می کند. این مشخصات تأکید می کند که وقتی نمی توانید تأیید کنید که یک توکن تازه به مشتری تعلق دارد ، چنین آبگرم ، ما نباید از آنها استفاده کنیم مگر اینکه چرخش توکن را در محل خود داشته باشیم.
بیایید در مورد این استراتژی امنیتی در بخش بعدی اطلاعات بیشتری کسب کنیم.
ایمن نگه داشتن نشانه های تازه
یک نشانه دسترسی کوتاه مدت به بهبود امنیت برنامه های ما کمک می کند ، اما با هزینه ای همراه است: وقتی منقضی می شود ، کاربر برای بدست آوردن یک مورد جدید باید دوباره وارد سیستم شود. تأیید مجدد مکرر می تواند تجربه کاربر درک شده از برنامه شما را کاهش دهد. حتی اگر شما برای محافظت از داده های آنها این کار را انجام می دهید ، کاربران ممکن است سرویس شما را ناامید کننده یا استفاده از آن دشوار بدانند.
یک نشانه تازه می تواند به شما در تعادل امنیت با قابلیت استفاده کمک کند. از آنجا که نشانه های تازه سازی به طور معمول طولانی تر هستند ، می توانید پس از انقضای نشانه های دسترسی کوتاه تر ، از آنها برای درخواست نشانه های دسترسی جدید استفاده کنید.
با این حال، از آنجایی که توکنهای تازهسازی نیز توکنهای حامل هستند، باید استراتژیای داشته باشیم که در صورت لو رفتن یا به خطر افتادن، استفاده از آنها را محدود یا محدود کند. همه کسانی که توکنهای تازهسازی را در اختیار دارند، این قدرت را دارند که هر زمان که بخواهند، توکنهای دسترسی جدید دریافت کنند."آنها" می توانند کاربران یا مهاجمان قانونی باشند.
در Auth0، مجموعهای از ویژگیها را ایجاد کردیم که خطرات مرتبط با استفاده از نشانههای بهروزرسانی را با اعمال حفاظتها و کنترلهایی بر چرخه عمر آنها کاهش میدهد. پلتفرم هویت ما چرخش توکن تازهسازی را ارائه میدهد که با تشخیص استفاده مجدد خودکار نیز همراه است.
بیایید عمیقتر به این تکنیک امنیتی بپردازیم.
Refresh Rotation Token
تا همین اواخر، یک استراتژی قوی برای کمک به SPAها برای حفظ جلسه کاربر، استفاده از جریان کد مجوز با PKCE در ارتباط با احراز هویت بیصدا بود. چرخش نشانههای Refresh تکنیکی برای بدست آوردن نشانههای دسترسی جدید با استفاده از نشانههای تازهسازی است که فراتر از احراز هویت بیصدا است.
چرخش توکن Refresh تضمین میکند که هر بار که یک برنامه یک توکن تازهسازی را برای دریافت یک نشانه دسترسی جدید مبادله میکند، یک نشانه تازهسازی جدید نیز برگردانده میشود. بنابراین، شما دیگر یک توکن به روز رسانی طولانی مدت ندارید که در صورت به خطر افتادن منابع، دسترسی نامشروع به منابع را فراهم کند. با رد و بدل شدن مداوم و باطل شدن توکنهای تازهسازی، خطر دسترسی غیرقانونی کاهش مییابد.
به عنوان مثال، با فعال کردن چرخش توکن رفرش در داشبورد Auth0، هر بار که برنامه شما یک نشانه رفرش را برای دریافت یک نشانه دسترسی جدید مبادله می کند، سرور مجوز نیز یک جفت نشانه دسترسی به تازه سازی جدید را برمی گرداند. این محافظ به برنامه شما کمک می کند تا حملات پخش مجدد ناشی از توکن های در معرض خطر را کاهش دهد.
تشخیص استفاده مجدد خودکار Refresh Token
توکنهای Refresh توکنهای حامل هستند. هنگام دریافت درخواست رمز دسترسی جدید، برای سرور مجوز غیرممکن است که بداند چه کسی مشروع یا مخرب است. سپس میتوانیم همه کاربران را به عنوان مخرب بالقوه در نظر بگیریم.
چگونه میتوانیم شرایطی را مدیریت کنیم که در آن شرایط مسابقه بین یک کاربر قانونی و یک کاربر مخرب وجود دارد؟مثلا:
🐱 کاربر قانونی دارای 🔄 Refresh Token 1 و 🔑 Access Token 1 .
😈 کاربر مخرب موفق به سرقت 🔄 Refresh Token 1 از 🐱 Legitimate User می شود.
🐱 کاربر قانونی از 🔄 Refresh Token 1 برای دریافت یک جفت نشانه دسترسی به تازه سازی استفاده می کند.
🚓 سرور مجوز Auth0 برمی گردد 🔄 Refresh Token 2 و 🔑 Access Token 2 to 🐱 Legitimate User .
😈 کاربر مخرب سپس سعی می کند از 🔄 Refresh Token 1 برای دریافت رمز دسترسی جدید استفاده کند. شر مطلق!
فکر می کنید بعد چه اتفاقی می افتد؟آیا 😈 کاربر مخرب موفق به دریافت یک نشانه دسترسی جدید می شود؟
این همان اتفاقی است که هنگامی که پلت فرم هویت شما دارای تشخیص مجدد خودکار است:
سرور مجوز 🚓 AUTH0 همه نشانه های تازه ای را که از نشانه اصلی تازه سازی پایین می آیند ، پیگیری می کند. یعنی "خانواده توکن" ایجاد کرده است.
سرور مجوز 🚓 AUTH0 تشخیص می دهد که شخصی در حال استفاده مجدد از Token 1 است و بلافاصله خانواده Token Token را باطل می کند ، از جمله 🔄 Refresh Token 2.
سرور مجوز 🚓 auth0 پاسخ پاسخ به کاربر مخرب را بازگرداند.
🔑 Access Token 2 منقضی می شود ، و 🐱 کاربر قانونی سعی در استفاده از 🔄 Token 2 برای درخواست یک جفت توکن با دسترسی جدید دارد.
سرور مجوز 🚓 AUTH0 یک پاسخ انکار شده را به کاربر قانونی واگذار می کند.
سرور مجوز 🚓 Auth0 برای دستیابی به دسترسی جدید و تازه کردن نشانه ها نیاز به تأیید مجدد دارد.
برای تازه ترین نشانه های تازه شده بسیار مهم است که بلافاصله هنگام ارسال یک نشانه تازه استفاده شده به سرور مجوز ، بلافاصله بی اعتبار شود. این امر مانع از استفاده از نشانه های تازه در همان خانواده نشانه برای دریافت نشانه های دسترسی جدید می شود.
این مکانیسم حفاظت بدون در نظر گرفتن اینکه کاربر مشروع یا مخرب قادر به تبادل Token 1 برای یک جفت توکن با دسترسی جدید قبل از دیگری است ، کار می کند. بدون اجرای حمل و نقل فرستنده ، سرور مجوز نمی تواند بداند که در صورت حمله پخش مجدد ، کدام بازیگر مشروع یا مخرب است.
تشخیص مجدد خودکار یک مؤلفه اصلی یک استراتژی چرخش توکن تازه است. سرور قبلاً نشانه تازه ای را که قبلاً مورد استفاده قرار گرفته است ، باطل کرده است. با این حال ، از آنجا که سرور مجوز هیچ راهی برای دانستن اینکه کاربر مشروعیت جدیدترین توکن را در اختیار دارد ، ندارد ، کل خانواده توکن را فقط برای ایمن بودن باطل می کند.
نشانه های تازه به ما کمک می کند تا ابزارهای حریم خصوصی را در آغوش بگیریم
حریم خصوصی موضوعی داغ در دنیای دیجیتال ما است. ما نه تنها نیاز به تعادل امنیت با راحتی داریم بلکه باید به عمل متعادل کننده نیز حریم خصوصی اضافه کنیم.
تحولات اخیر در فناوری حفظ حریم خصوصی مرورگر ، مانند پیشگیری از ردیابی هوشمند (ITP) ، از دسترسی به کوکی جلسه جلوگیری می کند و کاربران را ملزم به تأیید مجدد می کند.
هیچ مکانیسم ذخیره سازی مداوم در یک مرورگر وجود ندارد که بتواند دسترسی فقط توسط برنامه مورد نظر را تضمین کند. به همین ترتیب ، نشانه های تازه سازی طولانی مدت برای SPA مناسب نیستند زیرا آسیب پذیری هایی وجود دارد که کاربران مخرب می توانند برای به دست آوردن این آثار با ارزش بالا از آنها سوءاستفاده کنند و به آنها دسترسی به منابع محافظت شده را بدهند.
از آنجا که چرخش توکن تازه به دسترسی به کوکی جلسه Auth0 متکی نیست ، تحت تأثیر ITP یا مکانیسم های مشابه قرار نمی گیرد.
با این حال ، یک نشانه تازه می تواند طول عمر خود را با طول عمر یک نشانه دسترسی محدود کند. این بدان معناست که ما می توانیم با اطمینان از نشانه های Refresh برای بازی در کنار ابزارهای حفظ حریم خصوصی مرورگر استفاده کنیم و بدون ایجاد اختلال در تجربه کاربر ، دسترسی مداوم به کاربران نهایی را فراهم کنیم.
می توانید نشانه های تازه را در فضای محلی ذخیره کنید
بله شما آن را درست خواندید. هنگامی که چرخش توکن را در محل خود داریم ، می توانیم نشانه ها را در حافظه محلی یا حافظه مرورگر ذخیره کنیم.
شاید قبلاً شنیده باشید (شاید از ما) که نباید نشانه ها را در ذخیره محلی ذخیره کنیم.
ذخیره نشانه ها در ذخیره سازی محلی مرورگر ، تداوم را در صفحه های تازه سازی و زبانه های مرورگر فراهم می کند. با این حال ، اگر کاربران مخرب بتوانند با استفاده از حمله اسکریپت های متقاطع (XSS) JavaScript را در آبگرم اجرا کنند ، می توانند نشانه های ذخیره شده در ذخیره سازی محلی را بازیابی کنند. آسیب پذیری منجر به حمله موفق XSS می تواند در کد منبع SPA یا هر کد جاوا اسکریپت شخص ثالث که برنامه مصرف می کند ، مانند Bootstrap یا Google Analytics وجود داشته باشد.
با این حال ، ما می توانیم زمان انقضا توکن مطلق نشانه ها را کاهش دهیم تا خطرات امنیتی ذخیره نشانه ها در ذخیره محلی را کاهش دهیم. این باعث می شود تأثیر حمله XSS منعکس شده (اما نه مداوم). یک نشانه تازه ممکن است با پیکربندی طول عمر طولانی داشته باشد. با این حال ، طول عمر طولانی تعریف شده از یک نشانه تازه با چرخش توکن تازه کوتاه می شود. تازه سازی فقط در طول عمر نشانه دسترسی ، که کوتاه مدت خواهد بود ، معتبر است.
در برنامه های AUTH0 خود از نشانه های Refresh استفاده کنید
اگر علاقه مند به اضافه کردن تأیید اعتبار و مجوز به برنامه خود هستید ، فقط در چند مرحله ، اکنون برای یک حساب کاربری رایگان Auth0 ثبت نام کنید.
سند "بهترین شیوه های توکن" ما برخی از ملاحظات اساسی را بیان می کند تا هنگام استفاده از نشانه ها در نظر داشته باشید:
- آن را مخفی نگه دارید. مواظبش باش.
- داده های حساس را به بار اضافه نکنید.
- به نشانه ها منقضی می شود.
- آغوش https.
- تمام موارد استفاده از مجوز خود را در نظر بگیرید.
- ذخیره و استفاده مجدد
داشبورد AUTH0 پیکربندی خدمات تأیید اعتبار و مجوز خود را برای استفاده از نشانه های تازه سازی آسان می کند. SDK ها و کتابخانه های AUTH0 از توکن های تازه کار برای برنامه های وب ، برنامه های تک صفحه ای (SPA) و برنامه های بومی/موبایل پشتیبانی می کنند.
برای منابع اضافی در مورد نحوه استفاده از نشانه های تازه با Auth0 ، لطفاً به هر یک از این اسناد مراجعه کنید:
مکالمه را دنبال کنید
نیرو توسط جامعه Auth0. برای پیوستن به بحث ، اکنون ثبت نام کنید. پیوندهای جامعه در یک پنجره جدید باز می شوند.