اخبار، مطالب و رویدادهای مرتبط با توسعه نرم افزار رادکام

ایمن سازی برنامه ها با استفاده از احراز هویت بر مبنای توکن - بخش نهم - ترکیب کردن IdentityServer با ارائه دهندگان خدمات احراز هویت بیرونی

ترکیب کردن IdentityServer با ارائه دهندگان خدمات احراز هویت بیرونی

در استفاده از IdentityServer، همانگونه که قبلا نیز نشان دادیم، ما فقط به احراز هویت درون برنامه ای محدود نیستیم. ما می توانیم از ارائه دهندگان سیستم احراز هویت برون برنامه ای مانند فیسبوک و گوگل نیز استفاده کنیم. فایده این کار در این است که لزومی ندارد کاربران برای استفاده از وب سایت یک حساب کاربری جدید ایجاد کنند و می توانند از حساب های کاربری موجود خود مانند حساب های خود در شبکه های اجتماعی استفاده کنند. ما استفاده از گوگل را به عنوان ارائه دهنده سرویس احراز هویت برون برنامه ای نشان می دهیم. ابتدا باید در کنسول مربوط به توسعه دهندگان گوگل به آدرس https://console.developers.google.com یک پروژه جدید ایجاد کنید. ما قبلا یک پروژه راه اندازی کرده ایم و اگر به داشبورد نگاه کنید، می بینید که Google Plus API را نیز فعال کرده ایم.

Integrate external authentication service providers - Google Plus API

ما همچنین از قبل گواهی OAuth را نیز ایجاد کرده ایم تا وب سایت Roux Academy بتواند به API گوگل دسترسی پیدا کند.

Integrate external authentication service providers - credentials

اگر روی نام مربوطه در فهرست کلیک کنید، می توانید شناسه مشتری و کلید رمز مربوطه را ببینید. به این نکته هم توجه داشته باشید که چگونه URI مجاز تغییر آدرس را به آدرس مربوط به سرویس توکن خود تنظیم کرده ایم. ما همچنین باید مسیر /signin-google را به انتهای آدرس اصلی خود اضافه کنیم. این همان صفحه ایست که کاربران Roux Academy به آن صفحه بعد از احراز هویت توسط گوگل هدایت خواهند شد.

Integrate external authentication service providers - Client Id Client Secret

اجازه دهید به کد برگردیم. پروژه سرویس توکن خود را باز کنید. برای ایجاد ارتباط با یک سرویس دهنده احراز هویت خارجی باید ابتدا میان افزار احراز هویت مربوطه را به پروژه اضافه کنیم. ابتدا بسته Microsoft.AspNetCore.Authentication.Google را نصب می کنیم.

Integrate external authentication service providers - Add Google Authentication Package


این کار پشتیبانی از احراز هویت 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


نام را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید