【发布时间】:2020-11-12 18:11:19
【问题描述】:
我今天不得不查看一个 Intranet 站点的一些代码,它是一个带有 C# WebAPI 的 javascript 表单,它将 AD 用户名和密码(在登录期间)发送到后端,然后以该用户身份登录到 AD 以检查有效性。 (这都是本地的)。
我的 cmets 认为这相当于制作一个带有 facebook 徽标以及用户名和密码的表单,并要求用户使用它登录您的网站,然后自己登录 facebook 以检查 facebook 凭据是否有效。所以钓鱼和中间人一样,如果我们在我们的 Web 应用程序中拥有所有用户的所有 AD 凭据,那么就可以在任何地方以该用户身份登录并执行所有操作。
但是...讨论从开发团队开始,争论是
- 它可以工作,为什么不呢(没有什么可以出错的,它是 Intranet)
- 示例也在 stackexchange 上,例如这里: Validate a username and password against Active Directory?) 。因此,对于这个例子,我假设这仅用于特定情况,但从不在网络案例中使用
- 当您使用某种语言编写桌面应用程序时,您还需要以某种方式验证自己是否能够抵御 AD。
- 这是模拟的完美示例:我们模拟每个用户(我会在How to pass Windows Authentication credential from client to Web API service 的行中考虑更多)
- 如果我们将程序扩展为用户可以更改其广告密码的点,我们将需要新密码(和域管理员凭据),所以这相同(我认为您将始终重置等)
所以这会带来疑问。我的想法是(显然对于 AD 而不是 ADFS)
- Windows 中的用户登录
- 用户打开浏览器访问 URL
- IIS 配置了一个启用了 Windows 身份验证的站点
- 浏览器和 IIS 进行协商(浏览器与 Windows 层通信)
- 用户是否有效>继续
据我所知,这是最佳实践(stackexchange 上的大量链接,例如 proper implementation of "windows" authentication in web api? 和网络,例如 https://support.microsoft.com/en-us/help/323176/how-to-implement-windows-authentication-and-authorization-in-asp-net)
【问题讨论】:
-
请注意,在这里征求意见是题外话。但是,如果您需要对用户进行身份验证,您还会做什么?这里没有。
-
我在大约 3000 万个站点上添加了关于 Windows 身份验证和 iis 的最佳实践。
标签: javascript c# asp.net-web-api active-directory