目前,我们有许多使用Classic ASP通过.NET 2.0技术开发的Web应用程序(外部和内部)。每个Web应用程序都有自己的登录屏幕,可根据自己的自定义数据库或使用Windows身份验证进行身份验证。用户可以访问这些应用程序中的一个或多个,这意味着他们必须注销并重新登录到他们想要访问的应用程序。所有应用程序共享后端数据源的一部分。此外,除了跨应用程序复制之外,业务逻辑还嵌入在UI中,因为没有代码/业务逻辑共享。屏幕截图# 1 简要介绍了现有架构。
屏幕截图# 2 显示了建议的体系结构,我希望这将有助于更快的开发,代码/业务可重用性以及可能更简单的维护。用户将访问外部或内部URL。在外部,用户将提供凭据,并将根据自定义数据库进行身份验证。在内部站点中,用户将使用Windows身份验证自动登录。在创建了一些示例之后,我开始喜欢ASP.NET MVC 3.它将业务逻辑与UI分开,我也喜欢单元测试功能。
以下是我的问题:
根据我在网络上发现的内容,在单个网站中进行多次身份验证是不可行的。我的理解是,我必须为每种类型的身份验证(表单和Windows)托管一个网站。如何在用户通过身份验证后将用户重定向到公共登录页面,以便他们可以看到他们有权访问的模块(链接/菜单)?我是否必须向两个网站发布相同的代码集(dll和内容)?
有没有人遇到类似的架构问题?如果是,请您分享您所面临的挑战以及您如何解决这些挑战?设计此类应用程序的行业标准是什么?
建议的架构是否有意义,或者它是一个非常糟糕的设计?在ASP.NET MVC 3中执行此操作是否有任何缺点?
我非常感谢您的投入。
提前致谢。
答案 0 :(得分:3)
我会建立一个单独的网站,只处理Windows身份验证。然后我会依赖OpenID和/或OAuth之类的东西来请求凭证/令牌以确保用户具有适当的访问权限。
想要使用Windows凭据登录的用户会经历该过程,因为您正确地认为运行Windows身份验证的IIS服务器很难与其他内容混合使用。
您可以设置某种基于声明的推力网络,其中您的应用程序从受信任的来源获取凭据,并且通过该过程,您可以协商并控制跨越许多网站的访问权限。只要您不进行自定义托管或白标品牌,您就可以将所有内容放在一个地方(或者即使您这样做,您也可以设计它以便您拥有分发身份验证令牌的集中解决方案)。
答案 1 :(得分:2)
请记住Authentication and Authorization之间的区别。您可能想要一个单一的身份验证机制(或者两个,一个用于内部用户,一个用于外部用户)。这里有一篇类似的帖子,列出了一些非常好的指南:How to allow multiple authentication methods in ASP.NET?
答案 2 :(得分:0)
在一个项目中,我们构建了一个在网站的每个页面中使用的公共控制器类。它处理了身份验证和访问控制。当用户尝试访问任何页面时,它会检查是否有会话标识cookie。如果他们不这样做,他们需要进行身份验证(登录)。一个挑战是如何很好地实施安全性。目前的浏览器存在许多缺陷,使其变得困难。