Способы аутентификации и их применимость относительно системы. Проектирование таблицы в базе данных Identity. Регистрация пользователя и управление паролем. Реализация идентификационного сервиса в качестве основы системы. Триггер для репликации.
Аннотация к работе
Определения, обозначения и сокращенияАвторизация - это процесс определения того, имеет или не имеет некоторый субъект доступ к некоторому объекту. Сервис идентификации - сервис, предоставляющий идентификатор пользователя, удостоверяющий в известности идентификатора поставщику и предоставляющий иную информацию о пользователе [2]. Сервис-поставщик - компания, предоставляющая физическим и юридическим лицам доступ к определенному ассортименту коммуникационных и информационных услуг [3]. Система сквозной аутентификации (система единой аутентификации, система однократного входа, англ «Single Sign-On, SSO») - доступ пользователя к хранимым паролям и настройкам происходит после аутентификации в подобной системе, которая, как правило, совмещается с аутентификацией в операционной среде. Таким образом, введя свои персональные данные аутентификации (ПДА) один раз, например, логин и пароль, пользователь автоматически получает доступ ко всем системам, требующим аутентификации [4].с точки зрения пользователя технология однократного входа облегчает процесс использования систем, устраняя путаницу во вводе и запоминании логинов и паролей для каждой системы в отдельности; Указанное разделение процессов аутентификации и авторизации должно обеспечить возможность формирования системы «единого входа» (Single Sign-On, SSO) для пользователей Сервисов и облегчить пользование Сервисами. Недостатки: для каждого запроса необходимо 2 запроса, что делает Digest-авторизацию более медленной: вызов любого нового метода предполагает получение нового значения nonce (случайно сгенерированное на сервере значение, предоставляется и используется единожды), уязвима к атаке man-in-the-middle, атака на воспроизведение, пароль, хранящийся на сервере, может быть взломан. Для этих целей разработчик получает ключ API (API key) - длинные уникальные строки, содержащие произвольный набор символов, по сути заменяющие собой комбинацию username/password, - а пользователи разрешают доступ к части их разрешений. Реализация этого способа заключается в том, что IDP-сервис предоставляет достоверные сведения о пользователе в виде токена, а SP-приложение использует этот токен для идентификации, аутентификации и авторизации пользователя.Тем не менее, проблема построения системы единого входа является индивидуальной для каждой системы в отдельности и зависит от многих исходных условий, которые накладываются на систему в связи со спецификой ее уже существующих компонентов. Существует широкий выбор технологий, фреймворков, протоколов, стандартов, которые могут послужить фундаментом для построения системы единой аутентификации пользователей, но данный спектр был проанализирован и сведен к минимальному набору необходимых техник и стандартов, исходя из первоначальных условий построения такой системы.Методы аутентификации по токену и выхода из системы. /// Метод аутентификации пользователя на web-ресурсе по cookie [Route("session")] public async Task LOGINBYCOOKIE(LOGINUSERBINDINGMODEL model) APPLICATIONUSER user = await _USERMANAGER.FINDASYNC(model.Username, model.Password); CLAIMSIDENTITY COOKIESIDENTITY = await user.GENERATEUSERIDENTITYASYNC(_USERMANAGER, COOKIEAUTHENTICATIONDEFAULTS.AUTHENTICATIONTYPE);// POST api/account/token [Route("token")] public async Task LOGINBYTOKEN(LOGINUSERBINDINGMODEL model) // Invoke the "token" OWIN service to perform the login: /token var request = HTTPCONTEXT.Current.Request; using (var client = new HTTPCLIENT()) {new KEYVALUEPAIR("grant_type", "password"), new KEYVALUEPAIR("username", model.Username), new KEYVALUEPAIR("password", model.Password)Фильтр авторизации по токену. [ATTRIBUTEUSAGEATTRIBUTE(ATTRIBUTETARGETS.Class | ATTRIBUTETARGETS.Method, Inherited = true, ALLOWMULTIPLE = true)] public class TOKENSESSIONAUTHORIZEATTRIBUTE : AUTHORIZEATTRIBUTE {public TOKENSESSIONAUTHORIZEATTRIBUTE()--Check if this is an INSERT, UPDATE or DELETE Action. DECLARE @action as char(1); SET @action = "I"; - Set Action to Insert by default. WHEN EXISTS(SELECT * FROM INSERTED) THEN "U" - Set Action to Updated. IF NOT EXISTS(SELECT * FROM INSERTED) RETURN; - Nothing updated or inserted.var idp = new IDENTITYPROVIDER(new ENTITYID("http://localhost:52071/Metadata"), SPOPTIONS) The federation will load the metadata and // update the options with any identity providers found. organization.Names.Add(new LOCALIZEDNAME("Kentor", swedish)); organization.DISPLAYNAMES.Add(new LOCALIZEDNAME("Kentor IT AB", swedish)); organization.Urls.Add(new LOCALIZEDURI(new Uri("http://www.kentor.se"), swedish));APPLICATIONUSER user = await _USERMANAGER.FINDBYNAMEASYNC(model.Username); if ((model.Username == user.rucont_USERNAME ||user.PASSWORDHASH == null )&& user.rucont_PASSWORDHASH != null) {byte[] h = SHA512.Create().COMPUTEHASH(encoding.GETBYTES(model.Password)); } else if ((model.Username == user.rucontext_USERNAME || user.PASSWORDHASH ==