我有两个独立的自制应用程序需要相互通信。一个是前端应用程序(实际上是asp.net),另一个是会计应用程序的后端接口。后端接口不是专门为此前端创建的 - 它是许多其他应用程序用于与我们的产品集成的通用接口。
为方便用户,我们希望在我们的前端应用程序中提供Windows身份验证。这意味着我们需要将凭据传递给后端应用程序,后端应用程序必须检查它们。
我们不希望将我们的前端设置为后端的“可信”应用程序,后端可以作为任何用户进行身份验证。如果前端被黑客攻击,那么它也会破坏后端系统。
据我了解,使用Windows身份验证执行此操作的一种方法是Kerberos委派。但是,这需要为要委派的用户和执行委派的计算机(带有我们的前端的服务器)显式启用。默认情况下,这些选项在Active Directory中被禁用,我怀疑许多系统管理员会对所有用户启用它们有所保留。
另外,我不确定这是Kerberos代表团的意思。我不需要我们的前端来冒充连接的用户。我只需要证明这个用户已经对我进行了身份验证。
你会怎么做?
答案 0 :(得分:8)
我不清楚你的用例是什么和不能用,但我可以回答 Kerberos代表团的意图。
首先让我们谈谈Kerberos在授权之前所做的事情。重要的是要理解这部分,因为它很微妙。
Kerberos验证网络中两个端点之间通信的 BOTH 端点的身份,这些端点可以是交互式用户或计算机上运行的服务。
这是强身份验证,因此不允许以任何形式进行中间人攻击。如果设置正确,终点可以保证它们不会受到损害。到服务名称的级别(如果您在计算机上连接到II,则与在同一台计算机上连接到SQL Server不同)。它大量使用现代加密技术,需要使用安全证书。身份验证协议的细节很复杂,不值得进入,但它涉及两个身份验证端点和身份验证服务器之间大约20个不同的不同确认步骤(在Windows中,域控制器是身份验证服务器)。
那么代表什么呢?
委派是Kerberos标准的Microsoft扩展 允许受信任的来源继续对另一个进行身份验证 终点。
这使您可以充当“中间人” - 但是必须明确设置许多设置,安装证书等,以使其能够正常工作。这远非简单。 (编辑:这是关于细节的另一个答案 - https://stackoverflow.com/a/954154/215752)
因此,例如,您可以让某人对网站进行身份验证,然后让.NET代码连接到SQL Server 作为相同的用户来读取具有该用户权限的数据。
现在回答你的问题,因为我不确定你想做什么,我提出了三个选择:
1)您希望作为SAME用户连接到后端系统,作为在网站上进行身份验证的用户。
2)您希望作为不同用户连接到后端系统,而不是在网站上进行身份验证的用户(例如服务帐户)。
3)您希望在某些时候以SAME用户身份连接到后端系统,并在其他时间连接到不同的用户。 (例如,您需要验证这是后端系统的合法用户,但是希望在其他时间将受信任的操作作为系统帐户执行。这是(根据我的经验)最常见的用例。)
答案 1 :(得分:0)
这是一篇描述Kerberos如何工作以及如何设置的帖子。
答案 2 :(得分:0)
实际上,Kerberos委派专门针对此用例而设计。但是,这里的挑战是在遗留系统上制作这个,并且使用AD的设置,你不想改变它。
一种可能的方法是让前端只发送用户和身份验证时间,但后端可以查询Active Directory事件日志以确定该用户是否已通过前端验证。这需要您使用WIndows事件日志API。还可以使用AD中的事件日志设置来记录服务票证的问题。 (我的回忆是这是默认的) -