【发布时间】:2020-04-29 13:57:20
【问题描述】:
我的场景:
客户端应用程序(Net Core WPF)应该以某种方式找出当前用户的身份(例如使用System.Security.Principal.WindowsIdentity.GetCurrent())并使用 REST 服务器应用程序进行身份验证(Net Core) 有权访问 AD(它知道根 AD DirectoryEntry 的地址、名称和密码)。当且仅当在 AD 中的用户中找到来自客户端应用程序的用户时,身份验证才应该成功。顺便说一句,这是一个 Intranet 设置。
SO 上类似问题的解决方案(例如How to get the current user's Active Directory details in C#)通常建议使用DirectorySearcher 并过滤用户名"(sAMAccountName=theUserIWantToMatch)"。
但恕我直言,这还不够:
1) 不够安全,您可以轻松地通过创建具有相似名称的用户来冒充任何人。更不用说中间人攻击了。
2)它甚至不必是恶意的,很多人都有相似的名字。我可能已经使用具有相似用户名的计算机通过 VPN 连接到 Intranet 网络(类似于已经在该网络上的其他人)。
你能想出更好的方法来匹配用户(例如使用一些 GUID 或令牌)或完全不同的身份验证方法吗?重申一下:我不能使用通常的 ASP.NET Windows 身份验证,因为我的客户端是一个 WPF 应用程序,它使用 HttpClient 实例与服务器通信。
谢谢。
【问题讨论】:
标签: c# authentication .net-core active-directory