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

Авторы: Валерий Новицкий (Valeriy Novytskyy) и Рик Андерсон (Rick Anderson)

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

Создание приложения на портале разработчика Майкрософт

Если у вас нет учетной записи Майкрософт, нажмите кнопку "Создать". После входа вы перенаправляетесь на страницу Регистрация приложений:

  • Выбор новой регистрации
  • Введите Имя.
  • Выберите параметр для поддерживаемых типов учетных записей.
    • Пакет MicrosoftAccount поддерживает регистрации приложений, созданные с помощью параметров "Учетные записи в любом каталоге организации" или "Учетные записи в любом каталоге организации и учетных записях Майкрософт" по умолчанию.
    • Чтобы использовать другие параметры, задайте AuthorizationEndpoint и TokenEndpoint членыMicrosoftAccountOptions, используемые для инициализации проверки подлинности учетной записи Майкрософт, на URL-адреса, отображаемые на странице "Конечные точки" регистрации приложений после его создания (доступно, щелкнув "Конечные точки" на странице обзора).
  • В разделе URI перенаправления введите URL-адрес разработки с /signin-microsoft добавленным кодом. Например, https://localhost:5001/signin-microsoft. Схема проверки подлинности Майкрософт, настроенная далее в этом примере, автоматически обрабатывает запросы по /signin-microsoft маршруту для реализации потока OAuth.
  • Нажмите кнопку Зарегистрировать.

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

  • В области слева щелкните Сертификаты и секреты.
  • В разделе секреты клиента выберите новый секрет клиента
    • Добавьте описание секрета клиента.
    • Нажмите кнопку Добавить.
  • В разделе секретов клиента скопируйте значение секрета клиента.

Сегмент URI /signin-microsoft задается как обратный вызов по умолчанию поставщика проверки подлинности Майкрософт. Вы можете изменить URI обратного вызова по умолчанию при настройке ПО промежуточного MicrosoftAccountOptions слоя проверки подлинности Майкрософт с помощью унаследованного RemoteAuthenticationOptions.CallbackPath свойства класса.

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

Сохраните конфиденциальные параметры, такие как идентификатор приложения Майкрософт (клиента), найденный на странице обзора регистрации приложений и секрета клиента, созданного на странице "Сертификаты и секреты" с помощью диспетчера секретов. В этом примере выполните следующие действия.

  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, а __ — поддерживается.
  • Автоматически заменяется на :

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

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

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

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 Методы расширения, которые регистрируют обработчик проверки подлинности, могут вызываться только один раз для каждой схемы проверки подлинности. Перегрузки существуют, позволяющие настраивать свойства схемы, имя схемы и отображаемое имя.

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

Вход с помощью учетной записи Майкрософт

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

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

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

Если приложению требуется несколько поставщиков, выполните цепочку методов расширения поставщика:AddAuthentication

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

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

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

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

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

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

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

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

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

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

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

Следующие шаги

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

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

Создание приложения на портале разработчика Майкрософт

Если у вас нет учетной записи Майкрософт, нажмите кнопку "Создать". После входа вы перенаправляетесь на страницу Регистрация приложений:

  • Выбор новой регистрации
  • Введите Имя.
  • Выберите параметр для поддерживаемых типов учетных записей.
    • Пакет MicrosoftAccount поддерживает регистрации приложений, созданные с помощью параметров "Учетные записи в любом каталоге организации" или "Учетные записи в любом каталоге организации и учетных записях Майкрософт" по умолчанию.
    • Чтобы использовать другие параметры, задайте AuthorizationEndpoint и TokenEndpoint членыMicrosoftAccountOptions, используемые для инициализации проверки подлинности учетной записи Майкрософт, на URL-адреса, отображаемые на странице "Конечные точки" регистрации приложений после его создания (доступно, щелкнув "Конечные точки" на странице обзора).
  • В разделе URI перенаправления введите URL-адрес разработки с /signin-microsoft добавленным кодом. Например, https://localhost:5001/signin-microsoft. Схема проверки подлинности Майкрософт, настроенная далее в этом примере, автоматически обрабатывает запросы по /signin-microsoft маршруту для реализации потока OAuth.
  • Нажмите кнопку Зарегистрировать.

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

  • В области слева щелкните Сертификаты и секреты.
  • В разделе секреты клиента выберите новый секрет клиента
    • Добавьте описание секрета клиента.
    • Нажмите кнопку Добавить.
  • В разделе секретов клиента скопируйте значение секрета клиента.

Сегмент URI /signin-microsoft задается как обратный вызов по умолчанию поставщика проверки подлинности Майкрософт. Вы можете изменить URI обратного вызова по умолчанию при настройке ПО промежуточного MicrosoftAccountOptions слоя проверки подлинности Майкрософт с помощью унаследованного RemoteAuthenticationOptions.CallbackPath свойства класса.

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

Сохраните конфиденциальные параметры, такие как идентификатор приложения Майкрософт (клиента), найденный на странице обзора регистрации приложений и секрета клиента, созданного на странице "Сертификаты и секреты" с помощью диспетчера секретов. В этом примере выполните следующие действия.

  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, а __ — поддерживается.
  • Автоматически заменяется на :

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

Добавьте службу учетной записи Майкрософт в следующую 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 Методы расширения, которые регистрируют обработчик проверки подлинности, могут вызываться только один раз для каждой схемы проверки подлинности. Перегрузки существуют, позволяющие настраивать свойства схемы, имя схемы и отображаемое имя.

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

Вход с помощью учетной записи Майкрософт

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

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

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

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

Если приложению требуется несколько поставщиков, выполните цепочку методов расширения поставщика:AddAuthentication

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

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

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

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

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

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

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

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

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

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

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

Следующие шаги

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