настройка внешнего входа в учетную запись Microsoft с ASP.NET Core

По Рик Андерсон и Рик Андерсон

В этом примере показано, как позволить пользователям входить с их рабочей, учебной или личной учетной записи Microsoft, используя проект ASP.NET Core, созданный на предыдущей странице .

Создание приложения в Центр администрирования Microsoft Entra

Создание секрета клиента

Создайте секрет клиента в Центр администрирования Microsoft Entra, выполнив действия в Add и управляя учетными данными приложения в Microsoft Entra ID.

Хранение идентификатора и секрета клиента Microsoft

Сохраните конфиденциальные параметры, такие как идентификатор приложения Microsoft (клиента) ID и секрет клиента, созданные на предыдущем шаге, используя Secret Manager. В этом примере выполните следующие действия.

  1. Инициализировать проект для хранилища секретов согласно инструкциям в Включить хранилище секретов.

  2. Сохраните конфиденциальные параметры в локальном хранилище секретов с помощью ключей секретов Authentication:Microsoft:ClientId и Authentication:Microsoft:ClientSecret. <client-id> перечислен в разделе регистрация приложений Azure в поле Идентификатор приложения (клиента). <client-secret> находится в списке под Сертификаты & секреты как значение, а не идентификатор секрета.

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

Двоеточие (:) не работает в качестве разделителя с иерархическими ключами переменных среды на всех платформах. Например, Bash не поддерживает двоеточие (:) в качестве разделителя. Все платформы поддерживают синтаксис двойного подчеркивания (__) и автоматически заменяют его двоеточием (:).

Настройка проверки подлинности учетной записи Microsoft

Добавьте службу проверки подлинности в Program:

builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
    microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
    microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});

Перегрузка AddAuthentication(IServiceCollection, String) задает свойство DefaultScheme. Перегрузка AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) позволяет настраивать параметры аутентификации, которые можно использовать для установки настроек аутентификации по умолчанию для различных целей. Последующие вызовы AddAuthentication переопределяют ранее настроенные свойства AuthenticationOptions.

AuthenticationBuilder методы расширения, которые регистрируют обработчик проверки подлинности, могут вызываться только один раз для каждой схемы проверки подлинности. Существуют перегрузки, позволяющие настраивать свойства схемы, имя схемы и отображаемое имя.

Дополнительные сведения о параметрах конфигурации, поддерживаемых аутентификацией через учетную запись Microsoft, можно найти в справочнике по API MicrosoftAccountOptions. Это можно использовать для запроса различных сведений о пользователе.

Вход с помощью учетной записи Microsoft

  • Запустите приложение и выберите Вход. Появится параметр входа с помощью Microsoft.
  • Выберите вход с помощью Microsoft, чтобы перейти на сайт Microsoft для аутентификации. После входа с помощью учетной записи Microsoft вам будет предложено предоставить приложению доступ к вашим данным:
  • Выберите Да, чтобы вернуться к веб-сайту, где задать электронную почту.

Теперь вы вошли в систему с помощью учетных данных Microsoft.

Сведения об использовании нескольких поставщиков проверки подлинности см. в разделе Использование внешних поставщиков входа с Identity в ASP.NET Core.

Переадресация сведений о запросе с помощью прокси-сервера или подсистемы балансировки нагрузки

Если приложение развертывается за прокси-сервером или подсистемой балансировки нагрузки, некоторые из исходных сведений о запросе могут быть переадресованы в приложение в заголовках запросов. Обычно эти сведения включают схему безопасного запроса (https), узел и IP-адрес клиента. Приложения не автоматически считывают эти заголовки запросов для обнаружения и использования исходных сведений о запросе.

Схема используется в создании ссылок, влияющих на поток проверки подлинности с внешними поставщиками. Потеря безопасной схемы (https) приводит к тому, что приложение генерирует неправильные небезопасные URL-адреса перенаправления.

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

Дополнительные сведения см. в разделе Configure ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.

Устранение неполадок

  • Если поставщик учетной записи Microsoft перенаправляется на страницу ошибки входа, обратите внимание на параметры строки запроса ошибки и описания непосредственно после # (хэштег) в URI.

    Хотя сообщение об ошибке указывает на проблему с проверкой подлинности Microsoft, наиболее распространенной причиной является URI приложения, не соответствующий ни одному из redirect URIs указанных для веб-платформы Web.

  • Если Identity не настроен путем вызова services.AddIdentity в ConfigureServices, попытка аутентификации приведет к ArgumentException: параметр 'SignInScheme' должен быть предоставлен. Шаблон проекта, используемый в этом примере, гарантирует, что это сделано.

  • Если база данных сайта не была создана путем применения начальной миграции, при обработке запроса возникает ошибка в операции с базой данных. Коснитесь Применить миграцию, чтобы создать базу данных и обновить ее, чтобы продолжить выполнение ошибки.

Дальнейшие действия

  • В этой статье показано, как пройти проверку подлинности с помощью Microsoft. Следуйте аналогичному подходу для проверки подлинности с другими поставщиками, перечисленными на предыдущей странице .
  • После публикации веб-сайта в веб-приложение Azure создайте новые учетные данные клиента в административном центре Microsoft Entra.
  • Задайте Authentication:Microsoft:ClientId и Authentication:Microsoft:ClientSecret в качестве параметров приложения в Центр администрирования Microsoft Entra. Система конфигурации настроена для чтения ключей из переменных среды.

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

Создание приложения в Центр администрирования Microsoft Entra

Создание секрета клиента

Создайте секрет клиента в Центр администрирования Microsoft Entra, выполнив действия в Add и управляя учетными данными приложения в Microsoft Entra ID.

Хранение идентификатора и секрета клиента Microsoft

Сохраните конфиденциальные параметры, такие как идентификатор Microsoft Application (клиент и Client Secret, созданный на предыдущем шаге с Secret Manager. В этом примере выполните следующие действия.

  1. Инициализировать проект для хранилища секретов согласно инструкциям в Включить хранилище секретов.

  2. Сохраните конфиденциальные параметры в локальном хранилище секретов с помощью ключей секрета Authentication:Microsoft:ClientId и Authentication:Microsoft:ClientSecret:

    dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
    

Двоеточие (:) не работает в качестве разделителя с иерархическими ключами переменных среды на всех платформах. Например, Bash не поддерживает двоеточие (:) в качестве разделителя. Все платформы поддерживают синтаксис двойного подчеркивания (__) и автоматически заменяют его двоеточием (:).

Настройка проверки подлинности учетной записи Microsoft

Добавьте службу учетной записи Microsoft в Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
    });
}

Перегрузка AddAuthentication(IServiceCollection, String) задает свойство DefaultScheme. Перегрузка AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) позволяет настраивать параметры аутентификации, которые можно использовать для установки настроек аутентификации по умолчанию для различных целей. Последующие вызовы AddAuthentication переопределяют ранее настроенные свойства AuthenticationOptions.

AuthenticationBuilder методы расширения, которые регистрируют обработчик проверки подлинности, могут вызываться только один раз для каждой схемы проверки подлинности. Существуют перегрузки, позволяющие настраивать свойства схемы, имя схемы и отображаемое имя.

Дополнительные сведения о параметрах конфигурации, поддерживаемых аутентификацией через учетную запись Microsoft, можно найти в справочнике по API MicrosoftAccountOptions. Это можно использовать для запроса различных сведений о пользователе.

Вход с помощью учетной записи Microsoft

Запустите приложение и выберите Вход. Появится параметр входа с помощью Microsoft. Выберите Microsoft, чтобы перейти к Microsoft для проверки подлинности. После входа с помощью учетной записи Microsoft вам будет предложено предоставить приложению доступ к вашим данным:

Коснитесь Да, и вы будете перенаправлены обратно на веб-сайт, где можно установить ваш адрес электронной почты.

Теперь вы вошли в систему с помощью учетных данных Microsoft.

Переадресация сведений о запросе с помощью прокси-сервера или подсистемы балансировки нагрузки

Если приложение развертывается за прокси-сервером или подсистемой балансировки нагрузки, некоторые из исходных сведений о запросе могут быть переадресованы в приложение в заголовках запросов. Обычно эти сведения включают схему безопасного запроса (https), узел и IP-адрес клиента. Приложения не автоматически считывают эти заголовки запросов для обнаружения и использования исходных сведений о запросе.

Схема используется в создании ссылок, влияющих на поток проверки подлинности с внешними поставщиками. Потеря безопасной схемы (https) приводит к тому, что приложение генерирует неправильные небезопасные URL-адреса перенаправления.

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

Дополнительные сведения см. в разделе Configure ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.

Устранение неполадок

  • Если поставщик учетной записи Microsoft перенаправляет вас на страницу ошибки входа, обратите внимание на параметры строки запроса, такие как заголовок и описание ошибки, непосредственно после # (хэштег) в URI.

    Хотя сообщение об ошибке указывает на проблему с проверкой подлинности Microsoft, наиболее распространенной причиной является URI приложения, не соответствующий ни одному из redirect URIs указанных для веб-платформы Web.

  • Если Identity не настроен путем вызова services.AddIdentity в ConfigureServices, попытка аутентификации приведет к ArgumentException: параметр 'SignInScheme' должен быть предоставлен. Шаблон проекта, используемый в этом примере, гарантирует, что это сделано.

  • Если база данных сайта не была создана путем применения начальной миграции, вы получите ошибку Сбой операции базы данных при обработке запроса. Коснитесь Применить миграцию, чтобы создать базу данных и обновить ее, чтобы продолжить выполнение ошибки.

Дальнейшие действия

  • В этой статье показано, как выполнить проверку подлинности с помощью Microsoft. Вы можете следовать аналогичному подходу для аутентификации у других поставщиков, перечисленных на предыдущей странице.
  • После публикации вашего веб-сайта в веб-приложении Azure создайте новый секрет клиента в центре администрирования Microsoft Entra.
  • Задайте Authentication:Microsoft:ClientId и Authentication:Microsoft:ClientSecret в качестве параметров приложения в Центр администрирования Microsoft Entra. Система конфигурации настроена для чтения ключей из переменных среды.

Дополнительные ресурсы

Несколько поставщиков проверки подлинности