ترکیب کردن IdentityServer با ارائه دهندگان خدمات احراز هویت بیرونی
در استفاده از IdentityServer، همانگونه که قبلا نیز نشان دادیم، ما فقط به
احراز هویت درون برنامه ای محدود نیستیم. ما می توانیم از ارائه
دهندگان سیستم احراز هویت برون برنامه ای مانند فیسبوک و گوگل نیز استفاده
کنیم. فایده این کار در این است که لزومی ندارد کاربران برای استفاده از وب
سایت یک حساب کاربری جدید ایجاد کنند و می توانند از حساب های کاربری موجود
خود مانند حساب های خود در شبکه های اجتماعی استفاده کنند. ما استفاده از
گوگل را به عنوان ارائه دهنده سرویس احراز هویت برون برنامه ای نشان می
دهیم. ابتدا باید در کنسول مربوط به توسعه دهندگان گوگل به آدرس
https://console.developers.google.com یک پروژه جدید ایجاد کنید. ما قبلا
یک پروژه راه اندازی کرده ایم و اگر به داشبورد نگاه کنید، می بینید که
Google Plus API را نیز فعال کرده ایم.
ما همچنین از قبل گواهی OAuth را نیز ایجاد کرده ایم تا وب سایت Roux
Academy بتواند به API گوگل دسترسی پیدا کند.
اگر روی نام مربوطه در فهرست کلیک کنید، می توانید شناسه مشتری و کلید رمز
مربوطه را ببینید. به این نکته هم توجه داشته باشید که چگونه URI مجاز
تغییر آدرس را به آدرس مربوط به سرویس توکن خود تنظیم کرده ایم. ما همچنین
باید مسیر
/signin-google را به انتهای آدرس اصلی خود اضافه کنیم.
این همان صفحه ایست که کاربران Roux Academy به آن صفحه بعد از احراز هویت
توسط گوگل هدایت خواهند شد.
اجازه دهید به کد برگردیم. پروژه سرویس توکن خود را باز کنید. برای ایجاد
ارتباط با یک سرویس دهنده احراز هویت خارجی باید ابتدا میان افزار احراز
هویت مربوطه را به پروژه اضافه کنیم. ابتدا بسته
Microsoft.AspNetCore.Authentication.Google را نصب می کنیم.
این کار پشتیبانی از احراز هویت OAuth2 و Open ID مربوط به گوگل را به
پروژه اضافه می کند. حال می توانیم به سراغ کلاس startup.cs رفته و میان
افزار مربوط به Google Authentication را در متد ConfigureServices ثبت کنیم. یادمان باشد که در تنظیمات مربوط به آن، شمای مربوط به احراز هویت را
Google قرار دهیم. در مرحله بعد شِمای مربوطه (SignInScheme) را تعریف می
کنیم که این شِما اساسا میان افزار کوکی را پیکربندی می کند. که این کار به
طور موقت نتیجه ورود به یک سیستم احراز هویت خارجی را نگهداری می کند.
برای مثال کاربر ادعا می کند که از یک ارائه دهنده احراز هویت خارجی
برگردانده شده است. ما این کار را با استفاده از مقادیر از پیش تعیین شده و
ثابت سرور انجام می دهیم. برای این کار باید کتابخانه IdentityServer4 را
با استفاده از کلید using به کلاس خود در بالا اضافه کنیم. حال جلوتر رفته
و شمای مربوط به احراز هویت خارجی از از فهرست مربوطه داخل شیء
IdentityServerConstants انتخاب می کنیم. حال نوبت Client ID است که باید
با مقداری که در Google Developer Console ایجاد کرده بودیم برابر باشد.
مقدار مربوطه را از داخل کنسول گوگل کپی می کنیم و در اینجا قرار می دهیم.
همین کار را برای Client Secret انجام داده و از داخل کنسول گوگل برداشته و
اینجا قرار می دهیم. در نظر داشته باشید که ثبت احراز هویت گوگل باید بعد
از ثبت میان افزار IdentityServer و قبل از ثبت میان افزار MVC باشد.
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(TestUsers.Users);
services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = "189522251089-5ru1ulnctjcfuu11fefcsf7nqgkf4r27.apps.googleusercontent.com";
options.ClientSecret = "m5xm1QQlTEFZaWb5j8eW72qv";
});
services.AddMvc(option => option.EnableEndpointRouting = false);
}
این کل کدی بود که باید به پروژه اضافه می کردیم.
در نسخه قدیمی تر باید کد زیر را به متد Configure
اضافه می کردیم:
app.UseGoogleAuthentication(new GoogleOptions
{
AuthenticationScheme = "Google",
DisplayName = "Google",
SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
ClientId = "189522251089-5ru1ulnctjcfuu11fefcsf7nqgkf4r27.apps.googleusercontent.com",
ClientSecret = "m5xm1QQlTEFZaWb5j8eW72qv"
});
در نسخه قدیمی باید مقدار DisplayName را هم مشخص می کردیم که این مقدار
همان عبارتی است که در صفحه ورود به سیستم نشان داده می شود.
حال نگاهی به نحوه عملکرد سیستم احراز هویت خارجی می اندازیم.
منبع:
Lynda.com - ASP.NET.Core.Security
ترکیب کردن IdentityServer با ارائه دهندگان خدمات احراز هویت بیرونی