ASP .NET MVC在工作期间进行身份验证并保持用户身份验证的最佳实践

时间:2017-08-23 08:59:11

标签: asp.net asp.net-mvc authentication

我只是在调查这个问题并得到许多不同的建议,有人可以帮助详细说明这个问题吗

  • 现有方法
  • 限制
  • 利弊
  • 防止攻击

我正在寻找简短的评论以获得指导。

修改

观众是全球范围内需要注册的用户。

3 个答案:

答案 0 :(得分:3)

我从一些具有以下专业经验的系统中回答:

注意:如果您回答我在关于您的应用程序参数的评论中提出的问题,我可以进一步定义肯定/否定。

ASP.NET标识

使用用户名和密码的MVC框架附带的基本MS用户系统。这方面的一个优点是这个概念已经存在了很长时间,并且有大量的教程向您展示如何扩展它以使用诸如电子邮件/密码之类的东西或从您的用户收集某些数据,如他们的母亲的狗中间名或随你。如果您的用户可以共享计算机的环境,您也可以查看此处。认为工厂或医院设置有点交易。对此不利的是,您基本上被迫维护应用程序(或应用程序集群)中包含的所有用户设置,应用程序角色和用户管理。 Think Forms auth就此而言。如果您的应用程序是外部的,并且暴露AD服务会使您的安全团队感到不舒服,您可能需要查看此内容。

Windows身份验证

您基本上是针对Windows用户帐户进行身份验证,虽然没有必要,但在大多数情况下,您会为您的角色提供程序处理Active Directory等内容。对此的好处是,您的应用程序实际上不再负责用户管理及其随附的所有支持(weeeeee!),而是您更多地授权角色在您的应用程序中工作。这使得它变得轻而易举但是如果你有可能共享计算机的用户则会出现巨大的挫折,那么这是一个巨大的安全噩梦。您可能希望定位具有自己的特定计算机的用户,他们来这里工作并坐在这个计算机上。如果您的应用程序是外部托管的,这将成为一场噩梦,因为很容易使您的AD易受攻击,因为它的某些服务需要从外部访问。

表单/ Windows混合模型

在此基本上将您的站点配置为在表单身份验证上运行但是您的表单身份验证系统设置为在AD中作为后台进程授权用户。因此,当您拥有一些用户,其中一些用户正在共享计算机而另一些用户拥有专用计算机时,这就更好了。您基本上是在设置自己的表单auth网站,该网站接收重定向URL以及用户的用户AD名称和密码。然后,表单auth网站检查用户凭据在Active Directory中是否有效,设置会话cookie之类的有趣内容,并将用户重定向回具有经过身份验证的用户的MVC站点。在您的MVC站点上,您也有AD连接器(或者您可以使用N层设计进行查找),以告诉您用户所属的AD组并进行适当处理。因此,对于这样的系统,您可以将用户管理方面从单个站点转移到AD,但同时您可以灵活地将基本上是Windows身份验证的应用程序启动到具有混合用户的环境中(那些有专门的comps和那些分享的人。)对此缺点是,最初的首次设置是一个巨大的痛苦,因为你基本上构建了多个系统。此外,安全性也是一个问题,因为任何时候你有一个共享的计算机环境,事情更容易被滥用。你必须要有一个好的会话超时策略,然后生存和死亡。您还可以将表单与站点放在DMZ中,并将外部托管应用程序与AD直接交互分开。但是,您需要处理AD锁定,密码重置,强力尝试等事情。

外部提供商,例如facebook,twitter,google,例如OAuth

我从未在生产应用程序中亲自走过这条道路,所以我不能给你真实世界的正面或负面但需要提及,也许其他人可以在那里给我们一些见解。

对这个答案中的大量文本块表示抱歉,当我可以访问桌面时,会使格式更“漂亮”。

答案 1 :(得分:1)

如果使用ASP.NET MVC Framework,则可以使用ASP.NET Identity或外部提供程序(Google,Facebook,Microsoft等)对用户进行身份验证。

在Visual Studio中,如果您创建一个新的ASP.NET MVC项目并选择使用个人帐户进行身份验证,它将为您设置Identity系统。 为了保证用户的身份验证,我通常会在控制器类上面添加我想限制访问的[Authorize]属性。

答案 2 :(得分:0)

我不知道它可能有用 -

但我们使用signalR来查看用户是否在他正在工作时始终与服务器连接并进行身份验证。