Настройка внешнего входа Google в ASP.NET Core
От Валерия Новицкий, Рик Андерсон и Шараф Абасери
В этом руководстве показано, как разрешить пользователям входить с помощью учетной записи Google с помощью проекта ASP.NET Core, созданного на предыдущей странице .
Создание идентификатора и секрета клиента Google OAuth 2.0
Следуйте рекомендациям в по интеграции Google Sign-In в ваше веб-приложение (документация Google)
Перейдите к API Google & Services.
Сначала должен существовать Project, возможно, вам потребуется его создать. После выбора проекта введите панели мониторинга.
На экране согласия Oauth
на панели мониторинга :- Выберите тип пользователя — внешний и СОЗДАТЬ.
- В диалоговом окне информации о приложении укажите имя приложения , адрес электронной почты для поддержки пользователей , а также контактные данные разработчика .
- Перейдите к шагу в рамках.
- Пройдите через шаг тестовых пользователей.
- Просмотрите экран согласия OAuth и вернитесь к панели приложения.
На вкладке Учетные данные панели мониторинга приложения выберите СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ>OAuth идентификатор клиента.
Выберите тип приложения: >веб-приложение, выберите название .
В разделе Авторизованные URI перенаправления выберите ДОБАВИТЬ URI, чтобы задать URI перенаправления. Пример URI перенаправления:
https://localhost:{PORT}/signin-google
, где плейсхолдер{PORT}
является портом приложения.Нажмите кнопку CREATE.
Сохраните идентификатор клиента
и секрет клиента для использования в конфигурации приложения.При развертывании сайта либо:
- Обновите URI перенаправления приложения в консоли Google на URI перенаправления, развернутого для приложения.
- Создайте новую регистрацию API Google в консоли Google для рабочего приложения с URI перенаправления рабочей среды.
Хранение идентификатора и секрета клиента Google
Сохраните конфиденциальные параметры, такие как идентификатор клиента Google и значения секретов в Secret Manager. В этом примере выполните следующие действия.
Инициализируйте проект для хранения секретов согласно инструкциям по включению хранилища секретов.
Сохраните конфиденциальные параметры в локальном хранилище секретов с помощью ключей секретов
Authentication:Google:ClientId
иAuthentication:Google:ClientSecret
:dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
Разделитель :
не работает с иерархическими ключами переменной среды на всех платформах. Например, разделитель :
не поддерживается Bash. Двойный символ подчеркивания, __
, имеет следующие значения:
- Поддерживается всеми платформами.
- Автоматически заменяется двоеточием,
:
.
Вы можете управлять учетными данными и использованием API в консоли API.
Настройка проверки подлинности Google
- Добавьте в приложение пакет NuGet
Google.Apis.Auth.AspNetCore3
. - Добавьте службу проверки подлинности в
program.cs
: - Следуйте
Add Authtication for asp.net app
Вызов AddIdentity настраивает параметры схемы по умолчанию. Перегрузка AddAuthentication(IServiceCollection, String) задает свойство DefaultScheme. Перегрузка AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) позволяет настраивать параметры проверки подлинности, которые можно использовать для настройки схем проверки подлинности по умолчанию для различных целей. Последующие вызовы AddAuthentication
переопределяют ранее настроенные свойства AuthenticationOptions.
AuthenticationBuilder методы расширения, которые регистрируют обработчик проверки подлинности, могут вызываться только один раз для каждой схемы проверки подлинности. Перегрузки существуют, позволяющие настраивать свойства схемы, имя схемы и отображаемое имя.
Вход с помощью Google
- Чтобы получить ссылку на библиотеку, перейдите к , а также к Google developer library для получения ссылки на библиотеку.
- Затем перейдите к кнопке разработчика Google
- Настройте ваш контроллер для сопоставления с атрибутом
data-login_uri="{HostName}/{ControllerName}/{actionName}"
, так как после успешного входа вы будете перенаправлены на эту ссылку. - Создайте контроллер и действие, которое принимает один аргумент
string credential
, который возвращается Google после завершения процесса входа. - Проверьте
credential
с помощью следующей строки кода:GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
- При этом будут получены доступные сведения о пользователе, вошедшего в систему, который затем может храниться в базе данных.
Изменение URI обратного вызова по умолчанию
Сегмент URI /signin-google
устанавливается как стандартный обратный вызов поставщика аутентификации Google. Вы можете изменить URI обратного вызова по умолчанию при настройке промежуточного ПО аутентификации Google через унаследованное свойство RemoteAuthenticationOptions.CallbackPath класса GoogleOptions.
Устранение неполадок
- Если вход не работает, и вы не получаете никаких ошибок, перейдите в режим разработки, чтобы упростить отладку проблемы.
- Если Identity не настроен вызовом
services.AddIdentity
вConfigureServices
, попытка аутентификации приводит к ArgumentException: опция SignInScheme должна быть указана. Шаблон проекта, используемый в этом руководстве, гарантирует, что Identity настроен. - Если база данных сайта не была создана путем применения начальной миграции, при обработке запроса произошла ошибка : сбой операции базы данных. Выберите Применить миграции, чтобы создать базу данных, и обновите страницу, чтобы продолжить процесс после исправления ошибки.
- Ошибка HTTP 500 после успешной проверки подлинности запроса поставщиком OAuth 2.0, таким как Google: см. эту проблему GitHub .
- Как реализовать внешнюю проверку подлинности с помощью Google for React и других приложений SPA: см. этой проблеме GitHub.
Дальнейшие действия
- В этой статье показано, как пройти проверку подлинности с помощью Google. Вы можете следовать аналогичному подходу для аутентификации с другими поставщиками, перечисленными на предыдущей странице.
- После публикации приложения в Azure сбросьте
ClientSecret
в консоли API Google. - Задайте
Authentication:Google:ClientId
иAuthentication:Google:ClientSecret
в качестве параметров приложения на портале Azure. Система конфигурации настроена для чтения ключей из переменных среды.
ASP.NET Core