Kerberos、委派以及如何正确执行此操作?

2023-11-26

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

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

我们不希望将前端设置为后端的“可信”应用程序,因为后端可以将自己验证为任何用户。如果前端被黑客攻击,那么后端系统也会受到损害。

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

另外,我不太确定这就是 Kerberos 委托的用途。我不需要我们的前端来模拟正在连接的用户。我只需要证明这个用户已经向我验证了自己的身份。

你会怎么做?


我不清楚你可以对你的用例做什么,不能做什么,但我可以回答这个问题Kerberos 代表团的用途是什么。

首先我们来谈谈 Kerberos 在委派之前做了什么。很好地理解这一部分很重要,因为它很微妙。

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

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

那么委托到底是什么?

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

这允许您充当“中间人”——但是必须明确设置许多设置、安装证书等才能使其正常工作。这远非简单。 (编辑:这是关于细节的另一个答案 -https://stackoverflow.com/a/954154/215752)

例如,您可以让某人对网站进行身份验证,然后让 .NET 代码连接到 SQL Server作为同一用户以该用户的权限读取数据。


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

1) 您希望以与在网站上进行身份验证的用户相同的用户身份连接到后端系统。

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

2) 您希望以与在网站上进行身份验证的用户不同的用户身份(例如服务帐户)连接到后端系统。

  • 在这种情况下,您不需要委派。网站的 Kerberos 和后端的 Kerberos(作为不同的用户)将会很好地工作。

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

  • 在这种情况下,您可以同时使用两者。需要验证用户身份的连接的委派,然后在需要系统访问后端时恢复为服务帐户身份。 (我之前的一个问题详细介绍了如何在 .NET 平台上恢复系统身份,请参阅如何在 Kerberos 中“取消模拟”(取消委托?).)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kerberos、委派以及如何正确执行此操作? 的相关文章

  • SPNEGO:成功协商和身份验证后的后续调用

    在过去的几天里 我使用以下方法构建了一个概念验证演示GSS API and SPNEGO 目的是让用户通过 Http RESTful Web 服务单点登录访问我们的自定义应用程序服务器提供的服务 持有有效 Kerberos 票证授予票证 T
  • Jaas - 请求可更新的 Kerberos 票证

    我有一个 Java API 它与 Kerberos 服务器通信并执行各种操作 截至目前 我的 API 向 Kerberos 服务器请求不可更新的票证 据我了解 jaas 配置文件有一个选项可以将 renewTGT 选项设置为 true 以便
  • 使用 Symfony2 进行 Kerberos 身份验证

    我正在尝试在 Symfony2 中使用 kerberos 对用户进行身份验证 但我在途中有点迷失 当用户通过身份验证时 Apache 服务器返回 SERVER REMOTE USER 变量 给我他的用户名 我可以恢复这个值 request
  • 将 kerberos 票证添加到肥皂请求

    我有一个问题如下 我有一个 Web 服务 并且我想使用 Kerberos 进行身份验证 我通过添加服务引用来添加我的 Visual Studio wsdl 它创建了一个代理类 可以这么说 reference cs 可以调用该服务 他现在想要
  • python 中的方法委托

    我正在编写一个用于编排 AWS 集群的小型框架 并且有一些反复出现的常见分层模式 一种这样的模式是将实例集合收集到一个更大的对象中 然后将一些方法直接委托给所有实例 因此 我没有一遍又一遍地复制和粘贴相同的样板代码 而是使用以下模式对其进行
  • 如何在 flink 独立安装上进行 kerberos 身份验证?

    我有一个独立的 Flink 安装 我想在其上运行一个将数据写入 HDFS 安装的流作业 HDFS 安装是 Cloudera 部署的一部分 需要 Kerberos 身份验证才能读取和写入 HDFS 由于我没有找到有关如何使 Flink 与受
  • web.config 标头大小限制是否会覆盖注册表中的 http.sys 限制?

    我有一个 ASP Net 4 0 应用程序 在 Windows 2003 上的 IIS7 5 上使用 Windows 集成身份验证 一些用户报告了此消息的错误 错误请求 请求太长 HTTP 错误 400 请求标头的大小太长 其他人成功加载页
  • 使用 JSch 跳过 Kerberos 身份验证提示 [重复]

    这个问题在这里已经有答案了 我正在使用Connect 方法中的Ssh下面的 Java 类用于使用 SSH JSch 连接到服务器并在服务器中运行命令 问题是运行时Connect 服务器提示以下消息 Kerberos username Ker
  • Spark 1.6.Token只能通过kerberos或web认证来颁发

    我在 shell 驱动程序脚本中的 Spark submit 之前调用 kinit keytab 问题是 它本身可以工作 但是当我通过 Oozie 调用 shell 驱动程序脚本时 出现以下错误 Stdoutput py4j protoco
  • 用于测试的 Java 编写的嵌入式 Kerberos 服务器

    有谁知道任何嵌入式 Kerberos 服务器 KDC KAdmin 它们是用 Java 编写的 并且可以仅在 JVM 进程中运行 例如 Hadoop minicluster 或嵌入式 LDAP 服务器 我的目标是让人们运行需要 Kerber
  • Java:委托模式和受保护的方法

    我一直在使用委托模式将工厂创建的对象包装在第三方库中 最近 该库在基类中添加了受保护的方法 而我的包装类不再起作用 有没有人有一个好的解决方案而不诉诸反思 这是在第 3 方库及其包中 public class Base public voi
  • 使用 Oracle 客户端和 Kerberos 与 Python 连接到数据库

    我有一个 python 脚本 它基本上使用x Oracleoracle 客户端连接到我的数据库服务器 连接后我可以运行 SQL 查询 现在 由于我的数据库凭据已过期 我被迫使用我不知道的 kerberos 身份验证 以前只需执行以下代码即可
  • 如何验证域凭据(来自本机代码)?

    我想针对域控制器验证一组凭据 例如 Username joel Password splotchy Domain STACKOVERFLOW 在 NET 3 5 及更高版本中您可以使用PrincipalContext ValidateCre
  • 尽管allowtgtsessionkey注册表项无法检索TGT

    我正在尝试连接我们的 Windows 客户端应用程序以使用单点登录机制 我正在遵循可以找到的解释here http www javaactivedirectory com page id 196 我已经很难完成第一步 即获取登录用户的票证授
  • 无法获取 Master Kerberos 主体以用作 Talend Batch 作业的续订者

    我们正在尝试使用 talend 批处理 spark 作业来访问 Kerberos 集群中的配置单元 但我们收到以下 无法获取主 Kerberos 主体以用作更新程序 错误 通过使用 talend 中的标准作业 非 Spark 我们可以毫无问
  • 委托给私有部分

    有时 C 的隐私概念让我感到困惑 class Foo struct Bar Bar p public Bar operator gt const return p struct Foo Bar void baz std cout lt lt
  • 如何在 HBase 中续订过期的 Kerberos 票证?

    我有一个小型 spring 服务 它提供基本功能 例如从 hbase 表中放入 删除 获取 一切似乎都正常 但有一个问题 启动 Tomcat 服务器 10 小时后 我的 kerberos 票证过期 因此我应该更新它 我尝试对 hbase 使
  • 通过 Kerberos 使用 Active Directory 进行身份验证

    我正在构建一个需要不同级别身份验证的 Android 应用程序 并且我想使用 Active Directory 来实现这一点 据我所知 使用 Kerberos 是 Microsoft 建议的方式 对于 Android 我该如何执行此操作 我
  • 从 Java 6 升级到 Java 7 后 Kerberos 损坏

    我有一个使用 spring security kerberos 扩展的工作应用程序 在 jboss 上运行 运行 java 6 我正在将 jvm 从 java 6 升级到 java 7 当我这样做时 使用与 java 6 相同的代码库和相同
  • 在 Java 中启用 Kerberos 的详细日志记录

    我有一个基于 Java 的 Web 应用程序 它获取包含用户名和密码的 Web 表单的内容 并使用 Kerberos 对基于 Windows 的域进行身份验证 KDC 地址显然被配置为在每次查找时映射到不同的 IP 地址 这可以通过使用命令

随机推荐

  • 如何测试类型是否是具有非类型参数的模板的特化?

    我想知道是否有任何解决方案来查找类型是否是采用非类型参数而不指定每种类型的模板的特化 例如 如果有一个这样的类 template
  • jQuery 中的类名更改事件

    当元素类更改时 有没有办法在 jQuery 中触发事件 例子 img class selected into img class selected newclass 触发事件 And img class selected into img
  • pyodbc 和 mySQL

    我无法使用 pyodbc 连接到 mySQl 数据库 这是我的脚本的片段 import pyodbc import csv cnxn pyodbc connect DRIVER MySQL ODBC 3 51 Driver SERVER l
  • MacOS“配置:错误:无法运行 C 编译的程序”

    我对 MacOS 环境相当陌生 之前在编译 C 脚本时遇到了一些问题 我遇到了以下问题 fatal error stdio h No such file or directory include
  • Angular 4 动画不适用于 Safari iOS 9.3

    我目前正在所有可能的浏览器中测试我的应用程序 我发现角度动画在 Safari iOS 9 3 中的行为与预期不符 下班后 花了几个小时试图解决这个问题 我来寻求帮助 提前致谢 我的代码如下 包 json dependencies angul
  • Spring 3.1 自动装配在自定义约束验证器中不起作用

    我在自定义约束验证器内自动装配 bean 时遇到问题 约束验证器实例不是使用 Spring 的 LocalValidatorFactoryBean 给出的 JSR 303 提供程序是 hibernate validator 4 2 0 Fi
  • 为什么是“using namespace std;”被认为是不好的做法?

    我听说using namespace std 是不好的做法 我应该使用std cout and std cin直接代替 为什么是这样 声明与中的某些内容同名的变量是否存在风险 std命名空间 考虑两个名为 Foo 和 Bar 的库 usin
  • Windows Azure 上的 AspPDF 和 AspJPEG

    我最近开始将 NET 应用程序迁移到 Windows Azure 云服务 我们的应用程序严重依赖于许多 COM 类组件 其中包括 AspPDF 用于 PDF 生成和操作 和 AspJPEG 用于调整图像大小 在典型的非云 IIS 设置中 我
  • 如何将 Rowversion 或 Timestamp SQL Server 数据类型从 SQLDataReader 读取到 C# 变量

    我有一个 SQL Server 2012 数据库 每个表都有一组审计字段 其中一个是名为 RowVer 的列 其数据类型为timestamp 与 一样rowversion 我很难读取 a 的值SqlDataReader到一个 C 对象 其属
  • 在 Docker 容器内运行 Docker:无法连接到 Docker 守护进程

    我创建了一个 Dockerfile 来在 Docker 中运行 Docker FROM ubuntu 16 04 RUN apt get update apt get install y apt transport https ca cer
  • 两个四元数之间的“距离”(或角度大小)?

    我想找到两个四元数之间的 距离 我所说的 距离 是指单个浮点数或整数 而不是另一个四元数 这就是区别 即inverse q1 q2 我想你可以称我想要的为 角幅度 物理对象从原始角度旋转得越远 我就需要对其施加越大的扭矩 我不明白四元数涉及
  • 如何将 ComboBox 的 SelectedItem 绑定到作为 ItemsSource 中项目的副本的对象?

    我正在将 MVVM 模式与 WPF 一起使用 并遇到了问题 我可以将其简化为以下内容 我有一个 CardType 模型 public class CardType public int Id get set public string Na
  • 重写 std:exception 的析构函数

    如果以下情况 则以下程序无法在 g 4 4 中编译 line 8被评论 为什么 看来当我重写时std exception构造函数 我也必须重写它的析构函数 这是什么原因呢 include
  • Scala 中的反函数

    Scala 有没有办法表达任何函数的反函数 例如 如果我有一个函数f像这样 x Int gt x 1 我希望能够编写一个反函数g like f x Int gt x not a valid scala syntax or x Int gt
  • 字符串连接在 SQLite 中不起作用

    我正在尝试执行 SQlite 替换函数 但在函数中使用另一个字段 select locationname p from location 在此片段中 结果是 0 的列表 我本来期望一个字符串 其中包含来自 locationname 的文本和
  • 为什么使用整数而不是长整型?

    我经常看到有关的问题Overflow错误与vba 我的问题是为什么使用integer变量声明而不是仅仅定义所有数值变量 不包括double等 作为long 除非您正在执行类似 for 循环的操作 您可以保证该值不会超过 32 767 限制
  • Windows 上的 Java:如何将文件删除到垃圾箱(使用 JNA)

    我根本没有 Windows API 的经验 所以请原谅我的无知 我想将文件删除到垃圾箱 如何使用JNA以及如何检测这是否不可能 例如 因为文件位于网络共享上 Use com sun jna platform FileUtils代替com s
  • 使用支持 WebGL 的浏览器查看 VRML 文件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我有一个生成 VRML 1 0 文件的旧应用程序 我想构建一个基于 WebGL 的 Web 界面来显示这些 VRML 文件 有没有简单的方法可以做到
  • 具有 ngFor 元素的 ngModel 的动态 angular2 形式

    我正在尝试创建一个连接到 ngModel 的动态表单 它允许用户根据需要添加更多控件 如下图所示 表单的行为符合预期 但添加一组新控件时除外 因为它会删除先前输入的内容 尽管模型没有改变 我创建了这个plunkr为了展示我正在谈论的行为 这
  • Kerberos、委派以及如何正确执行此操作?

    我有两个独立的自制应用程序 需要在它们之间进行通信 一个是前端应用程序 实际上是 asp net 另一个是会计应用程序的后端接口 后端接口不是专门为此前端创建的 它是许多其他应用程序用来与我们的产品集成的通用接口 为了方便用户 我们希望在前