Включение параметров проверки подлинности в классических приложениях WPF с помощью Azure AD B2C
В этой статье описываются способы настройки и улучшения проверки подлинности Azure Active Directory B2C (Azure AD B2C) для классического приложения WPF.
Прежде чем начать, ознакомьтесь со статьей Настройка проверки подлинности в примере классического приложения WPF с помощью Azure AD B2C.
Предварительное заполнение имени входа в систему
Во время входа пользователя в систему ваше приложение может предложить определенное имя пользователя. При этом приложение может указать параметр запроса login_hint
с именем пользователя в запросе на авторизацию. Azure AD B2C автоматически заполняет имя для входа в систему — пользователю нужно ввести только пароль.
Чтобы предварительно заполнить имя для входа, выполните следующие действия.
- Если вы используете настраиваемую политику, добавьте обязательное входящее утверждение, как описано в статье Настройка прямого входа в систему.
- Найдите объект конфигурации Библиотеки проверки подлинности Майкрософт (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.
Чтобы перенаправить пользователей к внешнему поставщику удостоверений, выполните следующие действия.
- Проверьте доменное имя внешнего поставщика удостоверений. Дополнительные сведения см. в статье Перенаправление входа в поставщика социальных сетей.
- Создайте новый или используйте существующий объект
Dictionary
для хранения дополнительных параметров запроса. - Добавьте параметр
domain_hint
с соответствующим доменным именем в словарь (например,facebook.com
). - Передайте объект дополнительных параметров запроса в метод объекта конфигурации 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 позволяет поддерживать в потоке разные языки в соответствии с требованиями пользователей. Дополнительные сведения см. в статье Настройка языка.
Чтобы задать предпочитаемый язык, выполните следующие действия:
- Настройте язык.
- Создайте новый или используйте существующий объект
Dictionary
для хранения дополнительных параметров запроса. - Добавьте параметр
ui_locales
с соответствующим кодом языка в словарь (например,en-us
). - Передайте объект дополнительных параметров запроса в метод объекта конфигурации 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();
Передача настраиваемого параметра строки запроса
С помощью настраиваемых политик можно передать параметр настраиваемой строки запроса. Хорошим практическим примером является ситуация, когда требуется динамически изменять содержимое страницы.
Чтобы передать настраиваемый параметр строки запроса, выполните следующие действия.
- Настройте элемент ContentDefinitionParameters.
- Создайте новый или используйте существующий объект
Dictionary
для хранения дополнительных параметров запроса. - Добавьте настраиваемый параметр строки запроса, например
campaignId
. Задайте значение параметра (например,germany-promotion
). - Передайте объект дополнительных параметров запроса в метод объекта конфигурации 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 проверяет маркер и извлекает утверждение.
Чтобы включить указание маркера идентификатора в запрос проверки подлинности, сделайте следующее:
- В пользовательской политике определите технический профиль указания для маркера идентификатора.
- В коде создайте или получите маркер идентификации и задайте для него переменную (например,
idToken
). - Создайте новый или используйте существующий объект
Dictionary
для хранения дополнительных параметров запроса. - Добавьте параметр
id_token_hint
с соответствующей переменной, в которой хранится токен идентификации. - Передайте объект дополнительных параметров запроса в атрибут объекта конфигурации 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/redirect
com.onmicrosoft.contosob2c.exampleapp
представляет собой схему. Рекомендуется придерживаться этого шаблона. Если два приложения используют одну и ту же схему, пользователи могут выбрать среди них. Если пользователи сделают неправильный выбор, произойдет сбой входа. -
Полнота. В URI перенаправления должна быть схема и путь. Путь должен содержать минимум один символ косой черты после имени домена. Например,
//oauth/
— правильно,//oauth
— неправильно. Не добавляйте в универсальный код ресурса (URI) специальные символы. Например, запрещен символ подчеркивания (_).
Дальнейшие действия
- Дополнительные сведения см. в статье Параметры конфигурации MSAL для .NET, UWP, NetCore и Xamarin