Поделиться через


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

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

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

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

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

Создайте секрет клиента в Центре администрирования Microsoft Entra, следуя шагам в Зарегистрировать приложение на платформе идентификации Microsoft: добавление учетных данных.

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

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

  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. Двойный символ подчеркивания, __, имеет следующие значения:

  • Поддерживается всеми платформами.
  • Автоматически заменяется двоеточием, :.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Создайте секрет клиента в центре администрирования Microsoft Entra, выполнив шаги из : Регистрация приложения на платформе идентификации Microsoft и добавление учетных данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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