Kerberos,委托以及如何正确地执行此操作?

Vil*_*lx- 10 kerberos delegation

我有两个独立的自制应用程序需要相互通信.一个是前端应用程序(实际上是asp.net),另一个是会计应用程序的后端接口.后端接口不是专门为此前端创建的 - 它是许多其他应用程序用于与我们的产品集成的通用接口.

为方便用户,我们希望在前端应用程序中提供Windows身份验证.这意味着我们需要将凭据传递给后端应用程序,后端应用程序必须检查它们.

我们不希望将我们的前端设置为后端的"可信"应用程序,后端可以作为任何用户进行身份验证.如果前端被黑客入侵,那么它也会破坏后端系统.

据我了解,使用Windows身份验证执行此操作的一种方法是Kerberos委派.但是,这需要为要委派的用户和执行委派的计算机(带有我们的前端的服务器)显式启用.默认情况下,这些选项在Active Directory中被禁用,我怀疑许多系统管理员将保留关于为所有用户启用它们的保留.

此外,我不确定这是Kerberos代表团的意图.我不需要我们的前端来冒充连接的用户.我只需要证明这个用户已经对我进行了身份验证.

你会怎么做?

Hog*_*gan 8

我不清楚你的用例是什么,不能用你的用例,但我可以回答Kerberos代表团的意思.

首先让我们谈谈Kerberos在授权之前所做的事情.重要的是要理解这部分,因为它是微妙的.

Kerberos通过网络验证两个端点之间通信的两端的身份,这些端点可以是交互式用户或在计算机上运行的服务.

这是强身份验证,因此不允许以任何形式进行中间人攻击.如果设置正确,终点可以保证它们不会受到损害.到服务名称的级别(如果您在计算机上连接到II,则与在同一台计算机上连接到SQL Server不同).它大量使用现代加密技术,需要使用安全证书.身份验证协议的细节很复杂,现在不值得进行,但它涉及两个身份验证端点和身份验证服务器之间大约20个不同的不同确认步骤(在Windows中,域控制器是身份验证服务器).

那么代表团到底是什么?

委派是Kerberos标准的Microsoft扩展,它允许受信任的源继续对另一个端点进行身份验证.

这使您可以充当"中间人" - 但是必须明确设置许多设置,安装证书等,以使其能够正常工作.这远非简单.(编辑:这是关于细节的另一个SO答案 - /sf/answers/66790811/)

因此,例如,您可以让某人对网站进行身份验证,然后将.NET代码连接到SQL Server AS SAME USER以读取具有该用户权限的数据.


现在回答你的问题,因为我不确定你想做什么,我提出三个选择:

1)您希望作为SAME用户连接到后端系统,作为在网站上进行身份验证的用户.

  • 在这种情况下,Kerberos委派是完美的 - 它完全符合您的要求.

2)您希望作为不同用户连接到后端系统,而不是在网站上进行身份验证的用户(例如服务帐户).

  • 在这种情况下,您不需要委派.网站的Kerberos和后端的Kerberos(作为不同的用户)将非常有用.

3)您希望在某些时候以SAME用户身份连接到后端系统,并在其他时间连接到不同的用户.(例如,您需要验证这是后端系统的合法用户,但是希望将受信任的操作作为系统帐户执行其他时间.这是(根据我的经验)最常见的用例.)

  • 在这种情况下,您使用两者.委派需要验证用户身份的连接,然后在需要系统访问后端时恢复到服务帐户标识.(我之前的一个问题进入了如何在.NET平台上恢复系统身份的细节,请参阅如何在Kerberos中"取消模仿"(un-delegate?).)


kem*_*002 0

这是一篇描述 Kerberos 如何工作以及如何设置它的帖子。

ASP.NET 传递 Windows 身份验证凭据