Как использовать внешнего поставщика входа в систему с пользовательским хранилищем пользователей?

#asp.net-mvc #asp.net-identity

#asp.net-mvc #asp.net-identity

Вопрос:

Я разрабатываю ASP.NET Веб-приложение MVC 5, которое позволяет пользователю проходить аутентификацию с использованием внешнего поставщика.

В Интернете есть много информации о том, как включить внешних поставщиков входа в систему, но ни один из них не учит, как фактически аутентифицировать пользователя в системе при возврате входа на сайт MVC. Вся информация, которую я нашел, предполагает, что разработчик использует значение по умолчанию ASP.NET хранилище идентификационных данных пользователя, поэтому оно ничего не говорит о том, что делать дальше.

Например, в Google, когда пользователь выбирает учетную запись Google, вызов возвращается на сайт и запускает метод FindAsync пользовательского хранилища пользователей, но после этого, как я могу фактически войти в систему пользователя?

Это одна из моих попыток получить электронную почту пользователя:

     public Task<T> FindAsync(UserLoginInfo login)
    {
        var info = AuthenticationManager.GetExternalLoginInfoAsync().Result;
        var emailClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email);
    }
 

Но GetExternalLoginInfoAsync не принадлежит AuthenticationManager объекту.

Я прочитал, что Microsoft.AspNet.Identity.Owin это должно быть включено, но в моем случае этот пакет NuGet уже включен, и, конечно, соответствующий using оператор присутствует в коде.

Любая помощь, пожалуйста?

Комментарии:

1. Означает ли это, что вы не используете net-identity?

2. ДА… .net identity с пользовательским хранилищем пользователей. Я видел, что функция обратного вызова в AccountController содержит адрес электронной почты пользователя и имя пользователя, поступающие от внешнего поставщика, но она вызывает метод поиска SigningManager только с частью информации, содержащей ключ поставщика и имя поставщика. Это приводит к тому, что метод поиска пользовательского хранилища пользователей имеет параметр, который я показал в вопросе. Я могу решить эту проблему, заменив метод SigningManager, но я думаю, что это неправильный способ управления им.

3. помогает ли это? docs.microsoft.com/en-us/aspnet/mvc/overview/security /…

4. @jomsk1e На этом сайте не показано, как это сделать с помощью пользовательского хранилища пользователей, однако я, наконец, сделал что-то подобное. Этот сайт создает пользователя в методе ExternalLoginConfirmation AccountController. В моем случае требуется, чтобы пользователь уже существовал в хранилище пользователей, поэтому я извлекаю пользователя с помощью метода ExternalLoginCallback, добавляю логин и, наконец, подписываю его.