Самоличност, използване на OpenID и OAuth
В съвременните приложения такива системи за удостоверяване се изпълняват въз основа на протоколите OpenID и OAuth, които описват взаимодействието на приложение със система на трета страна. И двата протокола са описани накратко по-долу и са дадени техните работни схеми:
OpenID
Този протокол се използва за удостоверяване на потребителите чрез други интернет ресурси и проверява дали потребителят наистина е този, за когото се представя. Фигурата по-долу показва как работи OpenID:

OAuth

Пример за удостоверяване на Google
Създаване на приложение в Google Developer


Кликнете върху бутона "Запазване". Сега отидете в лявото меню в секцията „Библиотека“ и намерете Google+ API, отидете в менюто на този API:

В прозореца, който се отваря, щракнете върху бутона "Активиране", както е показано на фигурата по-долу:

След това ще се покаже следното съобщение:



Този ключ е публичен (ClientId). Когато щракнете върху бутона „Готово“, браузърът ще ви пренасочи към страницата с клиентски идентификатор в уеб приложението, където се показва и личният ключ (ClientSecret). Копирайте и двата ключа някъде, защото ще ни трябват по-късно.

Настройки на приложението
След като настроите OAuth проект на сайта на Google Developer, можете да започнете да интегрирате система за удостоверяване на трета страна във вашето приложение. Първо трябва да инсталирате пакет NuGet, който добавя библиотеки за работа с Google удостоверяване чрез Oauth с помощта на идентичност. Изпълнете следната команда в прозореца на конзолата на Package Manager:
Microsoft.Owin.Security.Google |
Удостоверява потребителите чрез акаунт в Google
Удостоверяване чрез всяка услуга, която поддържа OAuth 2.0
След като инсталирате пакета, трябва да активирате поддръжка за удостоверяване чрез приложение на трета страна в стартовия клас OWIN. За да направите това, редактирайте файла IdentityConfig.cs в папката App_Start на нашето приложение, както е показано в примера по-долу:
Всеки от пакетите, които са изброени в таблицата по-горе, съдържа метод на разширение, който позволява функционалност за удостоверяване чрез съответната услуга в OWIN. Удостоверяването на Google използва метода UseGoogleAuthentication, който се предава на обект GoogleOAuth2AuthenticationOptions. Параметрите за удостоверяване се предават в свойствата на този обект. По-специално, свойствата ClientId и ClientSecret указват публичния и частния ключ на приложението, което генерирахме по-рано.
Свойството AuthenticationType указва уникален идентификатор за екземпляра на доставчика на удостоверяване. Този идентификатор ще бъде показан при заявка за свойството Issuer на класа Claim, което разгледахме подробно в предишната статия. Благодарение на тази настройка можете да използвате няколко различни удостоверявания на Google, например, като използвате различни проекти в Google Developer.
Свойството CallbackPath указва връзката, към която потребителят ще бъде върнат след успешно удостоверяване с Google. Важно е това свойство да съответства на URL адреса за пренасочване, който посочихме във втората стъпка от добавянето на идентификационните данни.данни.
Сега нека добавим бутон за удостоверяване на Google към изгледа Login.cshtml, намиращ се в папката /Views/Account:
Новият бутон изпраща данни от формуляра към метода за действие GoogleLogin на контролера на акаунта. По-долу съм показал какви промени трябва да се направят на този контролер:
В метода на действие GoogleLoginCallback ние получаваме потребителските данни от Google с помощта на метода GetExternalLoginInfoAsync, извикан при внедряването на интерфейса IAuthenticationManager:
Класът ExternalLoginInfo съдържа следните свойства:
Връща потребителското име
Връща обекта ClaimsIdentity, свързан с потребителския идентификатор
Връща обект UserLoginInfo, който описва данни при външно влизане в приложението
Използваме метода FindAsync на класа за управление на потребителите, за да търсим въз основа на свойството ExternalLoginInfo.Login. Този метод връща обект AppUser, ако потребителят вече е бил валидиран от приложението преди:
Ако методът FindAsync не върне обект AppUser, това означава, че потребителят се удостоверява в приложението за първи път, така че създаваме нов обект AppUser с данните, получени от Google, и съхраняваме новия потребител в базата данни.
Всичко, което остава за удостоверяване, е да добавите твърдения (искове), свързани с този потребител и предоставени от Google, както и да създадете бисквитка за удостоверяване, която ви позволява да използвате идентификационни данни в приложението между сесиите:
Тестване на Google Удостоверяване
Трябва да се остави валидирането на потребителските данни, тъй като. по подразбиране, вASP.NET Identity в влизането можете да посочите само буквите от английската азбука. Нека ви напомня, че по-рано добавихме класа CustomUserValidator, където деактивирахме тази проверка:

Когато завършите процеса на удостоверяване, браузърът ще ви пренасочи обратно към приложението. Ако сега отворите страницата с данни /Claims/Index, можете да видите как искове от системата на Google са добавени към самоличността на потребителя: