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

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

Сообщение Anonymous »

Контекст:
Я создаю приложение .NET Framework 4.8, в котором пользователи должны войти в систему, используя свою текущую учетную запись организации Windows (Azure AD). Цель состоит в том, чтобы обеспечить проверку подлинности только для той учетной записи, под которой они вошли в Windows, без отображения других учетных записей. Я использую MSAL для аутентификации.
Проблема:
При использовании .WithLoginHint(currentWindowsUser) экран выбора учетной записи скрыт, и MSAL пытается для автоматического входа в систему. Однако он пропускает запрос пароля, даже если требуется повторная аутентификация. Это соответствует проблеме GitHub № 4133, где WithLoginHint обходит необходимые взаимодействия с пользовательским интерфейсом, такие как ввод пароля. Эта проблема активна с мая 2023 года...
https://github.com/AzureAD/microsoft-au ... ssues/4133
Без .WithLoginHint в приглашении для входа в систему отображается несколько учетных записей «Подключено в Windows» (из «Настройки» > «Учетные записи» > «Электронная почта и учетные записи»). Эти учетные записи не отображаются в WAM или реестре, что затрудняет их программную фильтрацию.
Желаемое поведение:
  • Пользователи должны иметь возможность проходить аутентификацию только с той учетной записью, которую они использовали для входа в сеанс Windows.
  • Другие учетные записи (например, учетные записи «Подключено в 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}");
Вопрос:
Как я могу:

[*]Принудительно запрашивать пароль для текущей учетной записи организации Windows, даже если пользователь уже прошел проверку подлинности в Windows?

[*]Запретить отображение учетных записей «Подключено в Windows» (из «Настройки» > «Учетные записи» > «Электронная почта и учетные записи») в приглашении для входа в систему?

[*]Убедиться, что пользователи могут проходить аутентификацию только с той учетной записью, которую они использовали для входа в сеанс Windows?

< /ol>
Среда:
  • .NET Framework 4.8
  • Машины, присоединенные к домену Windows.
  • Учетные записи организации Azure AD.
Примечание.
Ответы, предлагающие обновление до .NET 5+, невозможны.

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

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

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

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

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

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

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