#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, добавляю логин и, наконец, подписываю его.