我们计划在我们的架构中使用 kerberos。我想知道这项技术有哪些感知或实际优势,以及是否有任何替代方案。

请注意,我们有 .net 客户端和 java 服务器端。通信将通过消息总线和 SOA 进行

没有正确的解决方案

其他提示

如果您在主要是 Windows 的环境中工作(即Windows Server 2k3、域控制器、Active Directory 等)特别是您可以使用 冒充 通过 .NET,使用分离的 Web 服务器和数据库服务器。使用旧的 NTLM 方法,您无法执行“双跳”。


让我们看一个例子:

  • 您有一个网络服务器(WEB1)
  • 您在单独的计算机上有一个数据库服务器 (DB1)
  • 您有一个用户访问您的网站 (USER1)

USER1 点击显示订单列表的页面。您的 WEB1 服务器必须查询 DB1 才能将此信息显示在页面上。您希望根据用户的凭据和访问权限来限制看到的订单。因此,您可以设置 Active Directory 组并相应地分配用户。在数据库中,您为不同的组提供不同的安全性(例如,GROUP1 可能仅具有选择功能,而 GROUP2 可能具有选择、插入和更新功能)。

NTLM 不支持执行此操作所需的双跳。WEB1 必须将 USER1 的凭据发送到 DB1(否则 WEB1 必须使用硬编码到 web.config 中的已知专用用户 ID 和密码登录 DB1,例如,通常必须具有完全访问权限才能支持所有可能的用户角色)。您可以想象,如果 WEB1 受到损害,这可能会造成安全隐患,因此您不能这样做,否则任何获得 WEB1 控制权(可能通过 sql 注入)的人都可以执行专用用户帐户可以执行的任何操作,或者冒充任何​​他们想要的人。Kerberos 通过 Windows Server 上的委派,通过保持域服务器中的加密凭据密钥完整并传递来支持执行第二跳,并验证是否允许这样做(在两端,请参阅下文以了解在服务器上进行设置的信息)因为它必须明确允许)。

当开发具有数据库后端的 Intranet Web 应用程序(99% 的情况都是这样,对吧?)并且您希望通过 Windows 集成安全性控制授权和身份验证时,这样做非常有用。Kerberos 实际上是您唯一的选择,除非您的 Web 服务器和数据库服务器位于同一台计算机上,这意味着无需传输凭据,也无需进行模拟。

也可以看看:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top