Мой сценарий:
A клиентское приложение (Net Core WPF) должно каким-то образом выяснить личность текущего пользователя (например, с помощью System.Security.Principal.WindowsIdentity.GetCurrent()
) и аутентифицироваться с серверное приложение REST (Net Core) , которое имеет доступ к AD (оно знает адрес, имя и пароль root AD DirectoryEntry). Аутентификация должна быть успешной, если и только если пользователь из клиентского приложения найден среди пользователей в AD . Это настройка anet между прочим.
Решения для подобных вопросов здесь, в SO (например, Как получить подробности Active Directory текущего пользователя в C#), как правило, предлагают использовать DirectorySearcher
и фильтрация по имени пользователя "(sAMAccountName=theUserIWantToMatch)"
.
Но ИМХО этого недостаточно:
1) Это недостаточно безопасно, вы можете легко выдать себя за любого, просто создав пользователя с похожее имя. Не говоря уже о нападениях типа «человек посередине».
2) Это даже не должно быть злонамеренным, многие люди имеют схожие имена. Возможно, я подключился к сети intr anet через VPN, используя компьютер с аналогичным именем пользователя (похожим на кого-то другого, уже находящегося в этой сети).
Можете ли вы придумать лучший способ сопоставления пользователей ( используя какой-нибудь GUID или токен например) или совершенно другой метод аутентификации? Просто повторюсь: я не могу использовать обычный ASP. NET windows auth, потому что мой клиент - это приложение WPF, которое связывается с сервером с использованием экземпляра HttpClient
.
Спасибо.