【问题标题】:Is Forms Authentication totally necessary?表单身份验证是否完全必要?
【发布时间】:2011-10-29 10:50:19
【问题描述】:

我现在正在编写一个内部 Web 应用程序(使用 ASP.Net Web 窗体),它提出了一个奇怪的问题。我必须能够模拟当前登录的 Windows 用户,并根据他们的 Windows 身份验证执行命令以登录.. 并且......如果他们没有在我必须使用的应用程序中设置 Windows 身份验证登录他们,我必须能够接受用户名和密码。我还必须在 .Net 4.0 中编写应用程序,并尽可能保护它。我通过不在 web.config 中使用 Windows 身份验证或表单身份验证来实现此目的,而是设置会话变量以防止用户访问 Web 应用程序中的页面而不是登录。我通过创建一个奇怪的名称会话变量来做到这一点使用基于用户名(Windows 身份验证与否)的值,然后是秘密会话变量。秘密变量在 web.config 中作为 256 位加密字符串,我在其中解密,并设置为会话秘密。为了加载页面,第一个会话变量不能为空,第二个变量必须等于解密的密钥值......如果变量没有通过检查,它将它们重定向到登录页面。我在 Web 应用程序中的每个页面、通用处理程序和 Web 服务方法上都进行了设置。我在几分钟没有活动后使会话超时,并在注销时将所有会话变量设置为空,并使所有 cookie 过期。 (我也禁用了所有缓存)。

我的问题是......这是否提供与表单身份验证相当的安全性?我一直使用Forms认证,但是这里用不上。如果我这样做了,用户将不得不重新配置 IIS 和 web.config 中的设置以切换登录过程(据我所知,您不能同时使用 Forms 身份验证和 windows 身份验证来管理页面和其他 Web 的安全性资源)。使用上述方法,我可以做到两全其美,但我对我的方法的安全性感到好奇。除了使用表单身份验证之外,我还可以在这里实现什么来确保最大的安全性?不使用Forms认证是否可以实现同样级别的安全性?

感谢您提前提供任何见解!

【问题讨论】:

  • 哇,几年后...我觉得问这个问题很愚蠢。当然,与表单身份验证#facepalm 相比,我所描述的都是废话。我最终将 Forms Auth 与 Kerberos 和自定义成员资格提供程序一起使用来完成工作。

标签: asp.net vb.net session authentication webforms


【解决方案1】:

这是否提供与表单身份验证相当的安全性?

关于安全性的第一条规则是不要重新发明轮子,除非万不得已。您提出的任何自制解决方案都有潜力与提供的解决方案(如 Windows 或 Forms 身份验证)一样安全。问题是本土解决方案很少能发挥这种潜力。他们可能测试正常,但可能会保留一些细微的错误。您不想在一年后发现您在六个月前被黑客入侵。现有解决方案已在数百万个应用程序中测试和使用,而您的解决方案将在一个应用程序中使用并最多由少数人测试。

快速搜索表明可以在同一个应用程序中实现 Windows 和 Forms 身份验证,所以我会进一步研究。

Mixing Forms and Windows Security in ASP.NET

【讨论】:

  • 还按照您在安全漏洞中的建议将凭据存储在会话中。同意上面的观点,虽然听起来你只需要windows auth。
  • 感谢您的建议!唯一的问题是......将两者混合起来非常古怪......也许我会再试一次,但它并不像他们在那篇文章中所说的那样充分证明(我已经阅读并尝试过)。问题还在于我正在使用我必须使用的第三部分程序..来验证用户进入站点的身份。该程序允许 Windows 身份验证(需要模拟)或 UN 和 PW。使用 .Net 4.0 框架和 windows auth 进行模拟,并允许用户在不输入其域凭据的情况下进入登录屏幕也非常古怪
  • @TheCodeKing .. 我将凭据作为 256 位加密字符串存储在 web.config 中。他们必须解密会话的名称(这是硬编码的),并解密秘密才能进入......可能有一些漏洞可以解决这个问题......无论如何,感谢大家的建议..我只需要想出一些其他的方法来做到这一点,因为将身份验证与这个第 3 部分应用程序、.net 4.0 和模拟混合起来不够一致。
  • 基于会话的身份验证或授权的问题是它容易受到会话劫持、会话重放、中间人攻击,这些攻击可能使黑客破坏帐户。无需解密。自定义身份验证总是一个坏主意,它不会像内置实现那样安全。为什么不自己使用 Windows 身份验证或表单身份验证?任何一个都允许您创建新用户。
  • @wakurth - 您可以构建自己的成员资格提供程序,该提供程序继承自现有提供程序。这将有一些自己滚动的好处,而没有那么多缺点。
猜你喜欢
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2017-10-26
  • 2013-12-25
  • 2013-08-11
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
相关资源
最近更新 更多