Общие сведения о внешнем потоке проверки подлинности oauth в ASP.NET Core Identity

Я реализую Identity в ASP.NET Core 3, и у меня есть небольшая проблема с пониманием потока внешней аутентификации входа, как и у моих пользователей.

Все начинается достаточно ясно:

Внешний вход

Как и ожидалось, мне предлагается выбрать идентификатор Google:

Диалог входа в Google

Теперь в этот момент я ожидаю увидеть диалоговое окно, подобное следующему, с запросом разрешения на предоставление моему приложению доступа к различным частям удостоверения Google:

Диалоговое окно предоставления доступа

Но такого диалога никогда не бывает.

Что происходит дальше:

Подтвердить адрес электронной почты

Вышеупомянутый шаг процесса кажется совершенно нестандартным для любого потока oauth, который я когда-либо видел. Я уже указал, какой идентификатор Google я использую; адрес электронной почты однозначен. Так что этот диалог кажется посторонним и просто сбивает с толку моих пользователей. Есть ли причина этого шага, которую я не понимаю?

... И вернемся к диалоговому окну разрешений выше, который я ожидал увидеть, этого никогда не происходит. Почему приложение может принимать вход в Google без предоставления доступа через это диалоговое окно?


person Emilio    schedule 09.04.2020    source источник


Ответы (1)


Почему приложение может принимать логин Google без предоставления доступа через этот диалог?

Похоже, что Google автоматически предоставит OpenID Connect Scopes(openid profile email) после создания приложения. Вы можете проверить области в консоли --> Экран согласия OAuth:

введите здесь описание изображения

Но если вы хотите также потребовать дополнительные конфиденциальные области, вам все равно нужно предоставлять разрешение динамически во время аутентификации:

services.AddAuthentication()
.AddGoogle(options =>
{
    options.Scope.Add("https://www.googleapis.com/auth/gmail.modify");
    options.Scope.Add("https://www.googleapis.com/auth/gmail.settings.basic");
    options.ClientId = "xxxx";
    options.ClientSecret = "xxxx";
});

Есть ли причина для этого шага, которую я не понимаю?

Это связано с тем, что вы включаете удостоверение ASP.NET Core. В основном удостоверении asp.net для внешнего входа в систему после аутентификации удостоверение поможет создать локального пользователя, связанного с внешним пользователем входа. После шаблонная идентификация в проектах ASP.NET Core , вы можете проверить файл ExternalLogin.cshtml.cs внутри папки Areas/Identity/Pages/Account . В функции OnGetCallbackAsync вы найдете идентификатор, который проверит информацию о внешнем пользователе для входа и подтвердит, что локальный пользователь связан с внешним пользователем, если да, войдите в систему пользователя; Если нет, он перенаправит пользователя на другую страницу, чтобы попросить пользователя создать учетную запись в локальной базе данных.

Если вам не нужна эта функция, просто удалите основную идентификацию asp.net или настройте функцию OnGetCallbackAsync, чтобы пропустить процесс.

person Nan Yu    schedule 09.04.2020
comment
вы сказали: в функции OnGetCallbackAsync вы найдете удостоверение личности, которое проверит информацию о внешнем пользователе для входа и подтвердит, что локальный пользователь связан с внешним пользователем, если да, войдите в систему пользователя; Если нет, он перенаправит пользователя на другую страницу, чтобы попросить пользователя создать учетную запись в локальной базе данных. Если вам не нужна эта функция, просто удалите основную идентификацию asp.net или настройте функцию OnGetCallbackAsync, чтобы пропустить процесс. Вы имеете в виду, что для внешних пользователей входа НЕ обязательно иметь локальную учетную запись? Они могут получить доступ к моему сайту через основную идентификацию asp.net без локальной учетной записи? - person Emilio; 30.05.2020
comment
Do you mean that it is NOT necessarily for external login users to have a local account? Это зависит от ваших требований. They can access my site via asp.net core identity w/o local account? Нет, это просто локальная учетная запись, связанная с внешним пользователем, вам все равно нужно войти в систему с помощью внешнего поставщика удостоверений. - person Nan Yu; 01.06.2020