MSAL пропускает запрос пароля и отображает нежелательные учетные записи «Подключено в Windows».C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 MSAL пропускает запрос пароля и отображает нежелательные учетные записи «Подключено в Windows».

Сообщение Anonymous »

Контекст:
Я создаю приложение .NET Framework 4.8, в котором пользователи должны входить в систему с учетной записью организации (Azure AD). Цель состоит в том, чтобы обеспечить аутентификацию без показа других учетных записей Microsoft, которые ранее входили в систему на общем компьютере (он расположен в больнице и используется несколькими лаборантами). Я использую MSAL для аутентификации.
Проблема:
При использовании .WithLoginHint(currentWindowsUser) экран выбора учетной записи скрыт, и MSAL пытается для автоматического входа в систему. Однако он пропускает запрос пароля, даже если требуется повторная аутентификация. Это соответствует проблеме GitHub № 4133, где WithLoginHint обходит необходимые взаимодействия с пользовательским интерфейсом, такие как ввод пароля. Эта проблема активна с мая 2023 года.
Без .WithLoginHint в приглашении на вход отображается несколько учетных записей «Подключено в Windows» (в меню «Настройки» > «Учетные записи» > «Электронная почта и учетные записи»). Эти учетные записи не отображаются в WAM или реестре, что затрудняет их программную фильтрацию.
Желаемое поведение:
  • Пользователи должны иметь возможность проходить аутентификацию только с помощью своей учетной записи Microsoft (Azure AD).
  • Другие учетные записи (например, учетные записи «Подключено в Windows») не должны отображаться. .
  • А Запрос пароля должен появляться всегда, даже если пользователь уже прошел аутентификацию в Windows.

Код: Выделить всё

public async Task AcquireTokenInteractiveAsync()
{
try
{
// Get the current Windows user (UPN)
string currentWindowsUser;
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
UserPrincipal user = UserPrincipal.Current;
currentWindowsUser = user.UserPrincipalName; // e.g., "[email protected]"
}

// Configure the MSAL token request
var oBuilder = m_oClientApp.AcquireTokenInteractive(scopes: new[] { "User.Read" })
.WithPrompt(Prompt.Consent) // Shows unwanted accounts
//.WithLoginHint(currentWindowsUser) // Skips password prompt
.WithUseEmbeddedWebView(useEmbeddedWebView: true)
.WithParentActivityOrWindow(parent: m_oGetParentWindowFunc)
.WithExtraQueryParameters($"login_hint={currentWindowsUser}"); // Workaround for login hint, doesn't seem to work either.

// Execute the token request
AuthenticationResult oResult = await oBuilder.ExecuteAsync();
return oResult;
}
catch (MsalClientException oEx) when (oEx.ErrorCode == "redirect_uri_mismatch")
{
Debug.WriteLine($"Redirect URI configuratie fout: {oEx.Message}");
throw new AzureAuthenticationException("Redirect URI configuratie incorrect. Controleer Azure Portal instellingen.", oEx);
}
catch (Exception oEx)
{
Debug.WriteLine($"Interactie authenticatie fout: {oEx.Message}");
throw new AzureAuthenticationException("Interactie authenticatie mislukt. Controleer uw inloggegevens.", oEx);
}
}
Наблюдаемое поведение:
  • С .WithLoginHint:
    • Экран выбора учетной записи скрыт.
    • MSAL автоматически проверяет подлинность, не запрашивая пароль (даже если требуется повторная аутентификация).
    • li>
  • Без .WithLoginHint:
    • В приглашении на вход отображается несколько учетных записей «Подключено в Windows» (в меню «Настройки» > «Учетные записи» > «Электронная почта и учетные записи»). ).
    • Эти учетные записи не отображаются в WAM или реестре, что затрудняет их фильтрацию.
Попытки обходных путей (Не удалось):
  • .WithPrompt Variations:
    • Prompt.ForceLogin, Prompt.SelectAccount, Prompt.Consent.
    • Результат: либо пропуск запроса пароля, либо отображение нежелательных учетных записей.
  • Кэш вручную Удаление:

Код: Выделить всё

var accounts = await m_oClientApp.GetAccountsAsync();
foreach (var acc in accounts) await m_oClientApp.RemoveAsync(acc);
  • Результат: нет эффекта (встроенная проверка подлинности Windows по-прежнему обходит запрос).
  • Параметры запроса:
  • .WithExtraQueryParameters($"login_hint={currentWindowsUser}");
  • Результат: нет эффекта
Среда:
  • .NET Framework 4.8
  • Машины, присоединенные к домену Windows.
  • Учетные записи организации Azure AD.


Подробнее здесь: https://stackoverflow.com/questions/793 ... s-accounts
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»