آشنایی با سرویس توکن
یکی از مولفه های اصلی احراز هویت بر مبنای توکن، سرویس توکن امنیت
(Security Token Service) و یا به اختصار STS است. اصطلاحات دیگری که ممکن
است استفاده شود و شما مشاهده کرده باشید، سرور مجوز (Authorization
Server) و یا ارائه دهنده هویت (Identity Provider) هستند. این در اصل بخشی
از یک نرم افزار است که توکن های امنیت را برای مشتریان (Clients) صادر می
کند. به جای اینکه برنامه های مشتریان شما تایید اعتبار کاربران را عهده
دار شوند، مشتریان را به سمت این سرویس هدایت می کنند تا تایید اعتبار توسط
این سرویس انجام گردد. برای کسب اطمینان از دستکاری شدن، توکن رمزگذاری شده
و به صورت دیجیتالی امضاء می گردد. عمل رمزگذاری از یک کلید خصوصی (Private
Key) استفاده می کند که فقط برای سرویس توکن شناخته شده است. کلید عمومی که
برای رمزگشایی توکن مورد استفاده قرار می گیرد، با برنامه های مشتریان به
اشتراک گذاشته می شود. به این ترتیب مشتری اطمینان خواهد داشت که توکن از
سمت سرویس مربوطه دریافت شده است. سرویس های توکن از استاندارد های شناخته
شده ای برای ارائه اطلاعات هویتی استفاده می کنند، یکی از این استاندارد ها
OpenId Connect است. هنگام نیاز، گزینه های مختلفی برای استفاده از خدمات
توکن وجود دارد. شما می توانید سرویس سفارشی شده خود را با استفاده از یک
چارچوب نرم افزاری مانند IdentityServer ایجاد کنید و یا قادر هستید از یک
سرویس از قبل ساخته شده Active Directory Federation Services یا به اختصار
(ADFS) استفاده کنید.
اجازه دهید با دقت بیشتری توکن هایی که توسط این سرویس صادر می شوند را
بررسی کنیم. ما روی توکن های وب JSON که به اختصار JWT نامیده شده و یا jot
خوانده می شوند تمرکز خواهیم کرد.
این نوع توکن یک استاندارد تولید شده برای حمل اطلاعات هویتی بین دو طرف
استفاده کننده است. این نوع توکن، با زبان های مختلف برنامه نویسی کار کرده
و می تواند به راحتی در خلال این زبان ها منتقل شود. یک توکن JWT همه
اطلاعات لازم را در خود داشته و همه اطلاعات هویتی را درون خود نگهداری می
کند. این توکن از سه بخش تشکیل شده است، عنوان یا هدر(header)، سربرگ یا
بدنه(payload) و امضاء(signature). هدر از دو قطعه اطلاعاتی تشکیل شده است،
نوع توکن، که در این حالت JWT است و الگوریتم هش (Hash) که برای امضاء کردن
توکن استفاده می شود. بدنه یا سربرگ جایی است که تمام اطلاعات مربوط به
claim ها در آن نگهداری می شود.
این بخش شامل Claim های ثبت شده است، این Claim ها شامل اسامی از قبل رزرو
شده هستند و داده های عمومی/مشترکی را نگهداری می کنند، برای مثال
صادر کننده توکن و تاریخ انقضای آن جزو این اطلاعات هستند. توکن همچنین
قادر است claim هایی را داشته باشد که خود ما آنها را تعریف کرده ایم. به
عنوان مثال، نام و نشانگر(flag) ادمین نشان می دهد که آنها جزو گروه
مدیران هستند. و قسمت انتهایی نیز امضای توکن است. این یک کد هش است که با
استفاده از هدر و بدنه و کلید رمز ایجاد شده است. برای یک توکن بسیار مهم
است که به صورت دیجیتال امضا شود تا ثابت کند که از یک منبع معتبر آمده است. از
آنجاییکه این امضا با استفاده از هدر و بدنه ایجاد می شود، می توانید
اطمینان خاطر داشته باشید که این توکن دستکاری نشده است.
منبع:
Lynda.com - ASP.NET.Core.Security
آشنایی با سرویس توکن، Security Token Service