1

我继承了传统的三层 Web 应用程序,其中 ASP.net 2.0 用于 UI,.Net Web 服务 (ASMX) 在中间层,SQL Server 2005 用于 DB。这是目前唯一的用户是公司员工的 Intranet 应用程序。当前,该应用程序使用 Active Directory (AD) 身份验证。

在登录屏幕上,用户会看到用户名/密码对话框。中间层对 AD 进行简单调用以检查用户名/密码。如果没问题,则生成一个 sessionId guid 并将其发送回 UI。然后,此 sessionId 会在会话内 UI 的每个后续调用中传递。在处理请求之前,中间层中的所有方法首先根据 SQL Server 中的简单会话表检查 sessionID 的有效性。

我现在需要使应用程序的 Web 服务中间层可用于公共 Internet 可用的新 UI。我不需要担心身份验证,因为这将由新 UI 管理。但是,我不想让 Web 服务在没有任何安全性的情况下完全打开。我只是想确保调用服务的系统有权这样做。我不想因为必须维护当前使用的 sessionId 而给新 UI 带来负担。

对从新 UI 调用时保护服务的最佳方式有何看法?我想我可以使用 x509 证书,但我之前已经这样做过,所以我不知道有任何缺点(性能?)或如何进行实施。

新 UI 是使用 .Net 3.5 开发的。我们可以在中间层安装 .Net 3.5,所以我想我们可以从使用 WCF 中受益?

4

1 回答 1

0

我不相信这是一个适合密码学的问题。最好使用 IP 限制来限制对 Web 服务的访问。如果这些数据是通过开放互联网等不安全的连接传输的,那么您可以使用 ssl 来验证客户端和服务器,并确保传输的数据安全。您也可以使用 VPN,这可能是最容易实现的。

我关心你的会话表。我相信这会导致撤销用户帐户的延迟时间。如果此会话没有过期时间,则无法撤销用户帐户。用户登录后,您如何将其启动?

一种解决方案是让 ASMX Web 服务为每个请求查询活动目录,如果您的 AD 服务器没有承受重负载,那么这应该没问题。请记住,AD 本身就是一个非常传出的数据库。

于 2010-04-22T19:06:04.593 回答