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


Включение параметров проверки подлинности в классических приложениях WPF с помощью Azure AD B2C

В этой статье описываются способы настройки и улучшения проверки подлинности Azure Active Directory B2C (Azure AD B2C) для классического приложения WPF.

Прежде чем начать, ознакомьтесь со статьей Настройка проверки подлинности в примере классического приложения WPF с помощью Azure AD B2C.

Предварительное заполнение имени входа в систему

Во время входа пользователя в систему ваше приложение может предложить определенное имя пользователя. При этом приложение может указать параметр запроса login_hint с именем пользователя в запросе на авторизацию. Azure AD B2C автоматически заполняет имя для входа в систему — пользователю нужно ввести только пароль.

Чтобы предварительно заполнить имя для входа, выполните следующие действия.

  1. Если вы используете настраиваемую политику, добавьте обязательное входящее утверждение, как описано в статье Настройка прямого входа в систему.
  2. Найдите объект конфигурации Библиотеки проверки подлинности Майкрософт (MSAL), а затем добавьте метод withLoginHint() с указанием имени для входа.
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithLoginHint("bob@contoso.com")
    .ExecuteAsync();

Предварительный выбор поставщика удостоверений

Если вы настроили для приложения возможность входа с использованием учетных записей социальных сетей, таких как Facebook, LinkedIn или Google, вы можете указать параметр domain_hint. Этот параметр запроса сообщает Azure AD B2C о поставщике удостоверений социальных сетей, который должен использоваться для входа в систему. Например, если приложение указывает domain_hint=facebook.com, вход в систему выполняется непосредственно на странице входа в Facebook.

Чтобы перенаправить пользователей к внешнему поставщику удостоверений, выполните следующие действия.

  1. Проверьте доменное имя внешнего поставщика удостоверений. Дополнительные сведения см. в статье Перенаправление входа в поставщика социальных сетей.
  2. Создайте новый или используйте существующий объект Dictionary для хранения дополнительных параметров запроса.
  3. Добавьте параметр domain_hint с соответствующим доменным именем в словарь (например, facebook.com).
  4. Передайте объект дополнительных параметров запроса в метод объекта конфигурации MSAL WithExtraQueryParameters.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("domain_hint", "facebook.com");

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

Указание языка пользовательского интерфейса

Настройка языка в Azure AD B2C позволяет поддерживать в потоке разные языки в соответствии с требованиями пользователей. Дополнительные сведения см. в статье Настройка языка.

Чтобы задать предпочитаемый язык, выполните следующие действия:

  1. Настройте язык.
  2. Создайте новый или используйте существующий объект Dictionary для хранения дополнительных параметров запроса.
  3. Добавьте параметр ui_locales с соответствующим кодом языка в словарь (например, en-us).
  4. Передайте объект дополнительных параметров запроса в метод объекта конфигурации MSAL WithExtraQueryParameters.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("ui_locales", "en-us");

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

Передача настраиваемого параметра строки запроса

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

Чтобы передать настраиваемый параметр строки запроса, выполните следующие действия.

  1. Настройте элемент ContentDefinitionParameters.
  2. Создайте новый или используйте существующий объект Dictionary для хранения дополнительных параметров запроса.
  3. Добавьте настраиваемый параметр строки запроса, например campaignId. Задайте значение параметра (например, germany-promotion).
  4. Передайте объект дополнительных параметров запроса в метод объекта конфигурации MSAL WithExtraQueryParameters.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("campaignId", "germany-promotion");

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

Передача указания к маркеру идентификатора

Приложения проверяющей стороны могут передавать входящие маркеры JSON Web Token (JWT) в рамках запроса авторизации OAuth2. Входящий маркер представляет собой указание о пользователе или запросе на авторизацию. Azure AD B2C проверяет маркер и извлекает утверждение.

Чтобы включить указание маркера идентификатора в запрос проверки подлинности, сделайте следующее:

  1. В пользовательской политике определите технический профиль указания для маркера идентификатора.
  2. В коде создайте или получите маркер идентификации и задайте для него переменную (например, idToken).
  3. Создайте новый или используйте существующий объект Dictionary для хранения дополнительных параметров запроса.
  4. Добавьте параметр id_token_hint с соответствующей переменной, в которой хранится токен идентификации.
  5. Передайте объект дополнительных параметров запроса в атрибут объекта конфигурации MSAL extraQueryParameters.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("id_token_hint", idToken);

authResult = await app.AcquireTokenInteractive(App.ApiScopes)
    .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
    .WithExtraQueryParameters(extraQueryParameters)
    .ExecuteAsync();

Настройка журнала

Библиотека MSAL создает сообщения журнала, способные помочь при диагностике проблем. Приложение может настроить ведение журнала. Приложение также может предоставить пользовательский элемент управления уровнем детализации и установить, нужно ли регистрировать в журнале личные и корпоративные данные.

Рекомендуется создать обратный вызов при ведении журнала MSAL и предоставить пользователям возможность оправлять журналы при возникновении проблем с проверкой подлинности. MSAL предоставляет следующие уровни детализации при ведении журнала.

  • Ошибка. Означает, что возникла проблема и сгенерирована ошибка. Этот уровень используется для отладки и выявления проблем.
  • Предупреждение. Не обязательно указывает на ошибку или сбой, но эта информация предназначена для диагностики и выявления проблем.
  • Информация. MSAL записывает в журнал сведения о событиях в информационных целях (не обязательно для отладки).
  • Подробно. Этот уровень задан по умолчанию. MSAL записывает в журнал все сведения о поведении библиотеки.

По умолчанию средство ведения журналов MSAL не регистрирует персональные данные или данные организации. Библиотека позволяет при необходимости включить ведение журналов персональных и корпоративных данных.

В следующем фрагменте кода показано, как настроить ведение журнала MSAL.

PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
    .WithB2CAuthority(AuthoritySignUpSignIn)
    .WithRedirectUri(RedirectUri)
    .WithLogging(Log, LogLevel.Info, false) // don't log P(ersonally) I(dentifiable) I(nformation) details on a regular basis
    .Build();

Настройте URI перенаправления

Во время процесса регистрации классического приложения при выборе URI перенаправления учитывайте следующие важные моменты:

  • Разработка. Для разработки в классических приложениях можно задать URI перенаправления как http://localhost, и Azure AD B2C будет учитывать любой порт в запросе. Если зарегистрированный URI содержит порт, Azure AD B2C будет использовать только этот порт. Например, если зарегистрированный URI перенаправления задан как http://localhost, URI перенаправления в запросе может быть http://localhost:<randomport>. Если зарегистрированный URI перенаправления задан как http://localhost:8080, URI перенаправления в запросе должен быть http://localhost:8080.
  • Уникальные. Схема URI перенаправления должна быть уникальной для каждого приложения. В примере com.onmicrosoft.contosob2c.exampleapp://oauth/redirectcom.onmicrosoft.contosob2c.exampleapp представляет собой схему. Рекомендуется придерживаться этого шаблона. Если два приложения используют одну и ту же схему, пользователи могут выбрать среди них. Если пользователи сделают неправильный выбор, произойдет сбой входа.
  • Полнота. В URI перенаправления должна быть схема и путь. Путь должен содержать минимум один символ косой черты после имени домена. Например, //oauth/ — правильно, //oauth — неправильно. Не добавляйте в универсальный код ресурса (URI) специальные символы. Например, запрещен символ подчеркивания (_).

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