Понимание oauth внешнего процесса аутентификации входа в систему в ASP. NET Core Identity - PullRequest
0 голосов
/ 09 апреля 2020

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

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

External login

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

Google identity selection

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

Grant access dialog

Но этот диалог никогда не происходит.

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

Confirm email address

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

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

1 Ответ

0 голосов
/ 09 апреля 2020

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

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

enter image description here

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...