پیکربندی کاربران (Users) و سرویس گیرنده ها (Clients)
حال که منابع را پیکربندی کردیم، به سراغ پیکربندی کاربران و سرویس گیرنده
ها می رویم. کلاس پیکربندی یا همان config.cs را باز کنید، در انتهای کلاس
می خواهیم یک متد استاتیک اضافه کنیم. IdentityServer باید سرویس گیرنده
هایی (مشتریان) را که مجاز به استفاده از آن هستند را بشناسد. یک متد
به نام GetClients اضافه می کنیم که یک مجموعه از سرویس گیرنده ها بر می
گرداند. اینجاست که ما سرویس گیرنده MVC خودمان را پیکربندی می نماییم.
ابتدا به آن یک شناسه مشتری منحصر به فرد اضافه می کنیم. و نام آن
را RouxAcademyMVC قرار می دهیم و سپس یک نام سرویس گیرنده برای آن
مشخص می کنیم که اینجا آن را برابر با "Roux Academy MVC Client" قرار می
دهیم. در مرحله بعدی نوع دسترسی مجاز (Allowed Grant Type) را تعریف می
کنیم. این نوع دسترسی نحوه تعامل سرویس گیرنده با IdentityServer را مشخص
می کند. می خواهیم از نوع Implicit استفاده نماییم. نوع Implicit برای
هر دو درخواست های توکن تایید اعتبار و توکن دسترسی استفاده می شود. این
گزینه توکن را از طریق مرورگر عبور می دهد. و همچنین از برنامه های سمت
سرور و Javascript پشتیبانی می کند.
در مرحله بعد URI های هدایت
کننده(Redirect URIs) را پیکربندی می کنیم. این تنظیمات برای آن است که
کاربر بعد از ورود به سیستم به صفحه مربوطه هدایت شود. ما از آدرس
Localhost با پورت 5002 ("http://localhost:5002/signin-oidc") برای تنظیم
RedirectUris استفاده خواهیم کرد. سپس PostLogoutRedirectUris را تنظیم می
کنیم، این تنظیمات برای هدایت کردن کاربر بعد از خروج از سیستم استفاده می
شود. ما از همان آدرس localhost اینجا نیز استفاده می کنیم، تنها عبارت
انتهایی آدرس قبلی تغییر می یابد، آدرس مربوطه
"http://localhost:5002/signout-callback-oidc" خواهد بود. AllowedScopes
فهرست منابع(resource) و حوزه هایی(scope) را شامل می شود که کاربر می
تواند درخواست کند. می توانیم با استفاده از کلید
IdentityServerConstants به اینها دسترسی داشته باشیم. برای استفاده از این
امکان باید استفاده از IdentityServer4 را با استفاده از using در بالای
کلاس خود قرار دهیم. و سپس حوزه های استاندارد مورد نظر خود را اضافه می
کنیم که ابتدا حوزه OpenId را انتخاب می کنیم، . سپس به برنامه Client
مبتنی بر MVC که نوشته ایم اجازه می دهیم که به حوزه های تعریف شده
ما مانند Profile و Email دسترسی پیدا کند. با این کار پیکربندی
مخزن client ها تکمیل می گردد.
public static IEnumerable GetClients()
{
return new List
{
new Client
{
ClientId = "RouxAcademyMVC",
ClientName = "Roux Academy MVC Client",
AllowedGrantTypes = { GrantType.Implicit },
RedirectUris = {"http://localhost:5002/signin-oidc"},
PostLogoutRedirectUris = {"http://localhost:5002/signout-callback-oidc"},
AllowedScopes = new List
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email
}
}
};
}
سپس مخزن کاربران خود را تنظیم خواهیم کرد.
برای مخزن کاربران درون حافظه، برنامه ما یک کلاس TestUser در پوشه
Quickstart دارد. همانطور که می بینید دو کاربر به نام های Alice و Bob از
قبل تعریف شده است. و هر کدام از آنها نیز دارای مجموعه ای از claim ها
هستند که خود claim ها هم شامل زوج نام/مقدار می باشند. حال وقت آن رسیده
که پیکربندی IdentityServer را در کلاس Startup بروزرسانی کنیم تا مخزن های
درون حافظه ای ایجاد شده را به آن اضافه کنیم. به سراغ متد
ConfigureServices بروید. در ادامه متدی که IdentityServer را اضافه کرده
ایم، پیکربندی مربوط به IdentityServer را ویرایش می کنیم. ابتدا منابع
درون حافظه ای را از فایل Config برنامه مان اضافه می کنیم. سپس سرویس
گیرنده(clients) هایی که پیکربندی کرده ایم را اضافه خواهیم کرد. این سرویس
گیرنده ها را هم از کلاس Config بدست می آوریم. و در انتها با استفاده از
کلاس TestUsers کاربران آزمایشی خود را اضافه می کنیم. برای این کار باید
فضای نام IdentityServer4.Quickstart.UI را بالای صفحه اضافه کنیم. حال
تنظیمات سرویس توکن ما تکمیل شده است. بنابراین متد ConfigureServices ما
به این شکل تبدیل خواهد گردید.
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(TestUsers.Users);
services.AddMvc();
}
کارهایی که انجام دادیم به ما این امکان را می دهد که تایید هویت مبتنی بر
توکن را به برنامه خودمان اضافه کنیم.
منبع:
Lynda.com - ASP.NET.Core.Security
پیکربندی کاربران(Users) و سرویس گیرنده ها(Clients)