پیکربندی منابع IdentityServer
ما آماده هستیم تا IdentityServer را با کاربران، کلاینت ها و منابع مربوطه پیکربندی نماییم.
ما از یک سری اشیاء پیکربندی درون حافظه ای برای زمان توسعه و پیاده سازی
استفاده می کنیم که مقادیر مربوطه مستقیما درون کد قرار داده شده اند. در آینده
فرا خواهیم گرفت که چگونه این اطلاعات مورد نیاز خود را به صورت پویا از پایگاه
داده بارگذاری نماییم. ما با اضافه کردن یک کلاس جدید به نام config.cs به
پروژه سرویس دهنده توکن شروع می کنیم. ما در این کلاس متد های استاتیکی را
پیاده سازی خواهیم کرد که خروجی آن مجموعه های مورد نیاز ما خواهد بود.
ابتدا اجازه دهید منابعی را که می خواهیم از آنها محافظت کنیم تعریف
نماییم. منابع هویتی از کاربر و داده های ادعا شده(Claims) ایشان محافظت می کند.
ما یک متد استاتیک اضافه می کنیم که این متد مجموعه ای از اشیاء مربوط به منابع
هویتی بر می گرداند. برای این کار نیاز هست تا در بالای کلاس با استفاده از
کلیدواژه using استفاده از مدل های IdentityServer را اضافه کنیم. اسم متدمان
را GetIdentityResources می نامیم. ما یک سری منابع در اینجا اضافه خواهیم کرد
که توسط کلاس IdentityResource در اختیار ما قرار می گیرد. پروتکل Open Id
Connect شامل یک سری منابع هویت استاندارد مانند OpenId است که خود یک شناسه
کاربری منحصر به فرد است. ما همچنین جلوتر رفته و Profile را نیز اضافه می
کنیم. Profile شامل Claim های پیش فرض کاربر مانند نام و تاریخ تولد است. و در
نهایت ایمیل را نیز اضافه می کنیم. علاوه بر منابع استاندارد موجود، ما همچنین
می توانیم منابع هویتی دلخواه خودمان را نیز تعریف نماییم. ما یکی را برای نقش
کاربر اضافه می کنیم. هر منبع نام منحصر به فردی دارد و ما نام این مورد را
"Role" خواهیم گذاشت. همچنین این منبع شامل مجموعه ای از Claim های کاربر است.
ما یک مورد را به لیست خود با عنوان "Role" اضافه می کنیم. هنگامی که
کاربر احراز هویت می شود، توکن هویت، شامل Claim های استاندارد و تعریف شده
سفارشی خواهد بود.
using IdentityServer4.Models;
.
.
.
public static IEnumerable GetIdentityResources()
{
return new List
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResource
{
Name = "Role",
UserClaims = new List
{
"Role"
}
}
};
}
از آنجا که List ها باید نوع داشته باشند، در اصل کد ما باید به شکل زیر باشد:
using IdentityServer4.Models;
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResource
{
Name = "Role",
UserClaims = new List<string>
{
"Role"
}
}
};
}
منبع:
Lynda.com - ASP.NET.Core.Security
پیکربندی منابع IdentityServer