问题标签 [kerberos-delegation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
487 浏览

apache-spark - Kerberos:Spark UGI 凭据没有传递给 Hive

我正在使用 Spark-2.4,我有一个启用 Kerberos 的集群,我正在尝试通过spark-sqlshell 运行查询。

简化的设置基本上如下所示:在 Yarn 集群中的一台主机上运行的 spark-sql shell -> 运行一台主机的外部 hive-metastore -> 用于存储表数据的 S3。

当我在spark-sql启用调试日志记录的情况下启动 shell 时,这就是我在日志中看到的内容:

这意味着 Spark 进行了调用以从 Hive 元存储中获取委托令牌,然后将其添加到 UGI 的凭据列表中。这是 Spark 中的一段代码。我还在 Metastore 日志中验证了正在进行get_delegation_token()调用。

现在,当我运行一个简单的查询时,例如create table test_table (id int) location "s3://some/prefix";遇到 AWS 凭证错误。我修改了配置单元元存储代码,并在初始化 Hadoop 中的文件系统之前添加了这个代码(org/apache/hadoop/hive/metastore/Warehouse.java):

在元存储日志中,这会打印正确的 UGI 信息:

但是 UGI 中没有代币。看起来Spark 代码使用别名添加了它,hive.server2.delegation.token但我在 UGI 中看不到它。这让我怀疑 UGI 范围以某种方式被隔离并且没有在 spark-sql 和 hive 元存储之间共享。我该如何解决这个问题?

0 投票
1 回答
218 浏览

c# - IdentityServer ClaimsIdentity to Impersonated WindowsIdentity

我有一个 IdentityServer 设置来连接到外部 ADFS 服务器。我可以通过 OAuth2 / OpenId Connect 登录并获取访问令牌。AspNet.Core WebApi 在 IIS AppPool 中运行,用户启用了 Kerberos 委派(应该有,不知道如何检查,因为我没有进入基础设施)。

我想要实现的是,我从 WebApi 上的 IdentityServer 获得的 ClaimsIdentity 使用模拟转换回 WindowsIdentity,无需密码。只需一个用户名就足够了。使用实际模拟的 WindowsIdentity,我应该登录到数据库并进行一些突变。

我不确定这是否可能,但我已经为此苦苦挣扎了一段时间。

将此作为模拟实施的基础。我唯一的问题是Context.User.Identity不返回 a WindowsIdentity,而是 a ClaimsIdentity

我尝试的另一种方法是使用var user = new WindowsIdentity(username);其中的用户名是 UPN。这将创建一个身份,ImpersonationLevel.Identity而不是ImpersonationLevel.Impersonated. 当我WindowsIdentity.RunImpersonated()使用此用户运行时,访问令牌将在加载所需的程序集时给出拒绝访问或 IOException。

所以第一个问题:如何检查 IIS AppPool 用户是否具有正确的 Kerberos 委派权限?

第二个问题:是否甚至可以仅使用用户名来冒充用户?

0 投票
1 回答
629 浏览

active-directory - 在跨域 AD 帐户中配置委派问题

在我们的测试环境中有 2 个域。单向信任已设置,然后我们更改为双向信任仍然无法正常工作。

我想在 domainA/userA 上设置委托。在Delegation选项卡中,我选择Trust this user for delegation to specificed services only. 然后在Services to which this account can present delegated credentials我尝试查找 domainB/ssrs(SQL 报告服务的服务帐户),但在 domainB 下找不到任何用户。但是,我可以在 domainB/userB 与 domainB/ssrs 之间设置委托。

我没有委托或kerberos的经验。您能否建议跨域委派是否可行?如果是,我该怎么办?

在此处输入图像描述

0 投票
1 回答
261 浏览

c# - 如何通过 Kerberos 委派进行 LDAP 查询

客户同时拥有内部域和 DMZ 域。此时两个域之间没有信任。我们在 DMZ 区域部署了 Web 应用程序,因为该应用程序也与外部用户进行了一些交互。

  1. 来自内部域的内部用户需要能够通过 Kerberos 身份验证登录到我们的 Web 应用程序,考虑到 Web 应用程序的应用程序池需要能够解密来自内部用户的服务票证,而应用程序池帐户来自 DMZ领域?
  2. 假设 #1 是可能的,在内部用户登录后,我们需要对其他内部用户和组的人员选择器进行 LDAP 查询。在这里,我们想通过 Kerbeos 委托对内部域进行 LDAP 查询。只是想知道在这种情况下我们如何找到内部域控制器。有什么方法可以查询 GC 吗?还是我们应该在配置文件中配置它,或者我们可以从登录用户的 UPN 中获取?现在假设我们有内部域控制器地址,我们如何通过 Kerbeos 约束委派模拟登录的内部用户来进行查询?使用 C# DirectoryEntry 构造函数 public DirectoryEntry (string path, string username, string password, System.DirectoryServices.AuthenticationTypes authenticationType); ,我们可以提供一个 authenticationType 作为委托,尽管我仍然需要提供我没有的用户名和密码。
0 投票
1 回答
278 浏览

c# - 使用集成 Windows 身份验证时 MSAL 4.16.0 出现问题

我正在编写一个使用 MSAL 库生成访问令牌的 dotnet 核心控制台应用程序。我正在使用集成 Windows 身份验证,因为我所在的组织满足了链接中提到的所有约束。这似乎适用于 MSAL 4.15.0 库版本。但是一旦我开始使用 MSAL 4.16.0 版本,我最终会得到以下异常。

这是我写的简单代码:

只是为了进一步澄清,这在MSAL 4.15.0 之前都可以正常工作。它从MSAL 4.16.0及更高版本开始失败。

任何想法为什么?

0 投票
1 回答
474 浏览

apache-spark - 在 Kerberos 环境中无法通过 Spark 访问 Hive:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS]

大家好,我在 kerberos 环境中运行 Spark(2.4.4),我编写了一个代码来通过 Spark 查询 Hive 表。我也在 spark-submit 命令中做 kinit ,但我仍然面临

这是我的代码:-

通过 Spark Sql 访问 Hive 表的代码。

我正在执行一个用于 spark-submit 的 shell 脚本,我正在执行 kinit 并通过 --principal $KERBEROS_PRINCIPAL --keytab $KERBEROS_KEYTAB 。

火花提交命令:-

错误日志:-

任何帮助表示赞赏!

0 投票
0 回答
55 浏览

wcf - 连接到 Web 服务时出现意外的 401 错误(可能与 kerberos \ double hop 错误有关)

我们有一个使用 URL https:\destination.domain\Service1.svc 连接到 Web 服务 (service1.svc) 的客户端。此 Web 服务使用 URL https:\localhost.domain\service2.asmx 连接到第二个 Web 服务 (service2.asmx)。这两项服务都托管在同一个网络服务器上。域控制器上的 DNS 将 destination.domain 设置为指向 webserver 的 IP,并将 localshost.domain 设置为 127.0.0.1。应用程序池帐户是配置为允许委派的全局服务托管帐户,称为 webserveraccount。应用程序池配置为使用 appPoolIdentity。

我们看到连接到第二个 Web 服务 (service2.asmx) 的 401 授权错误。我还看到了一个 KDC_ERR_BADOPTION,这让我觉得我们的 SPN 配置不正确。在上述情况下,SPN 的正确格式是什么?或者这不是与 kerberos 相关的问题吗?

0 投票
0 回答
319 浏览

c# - Dotnet Core API 中的模拟和潜在的 Kerberos 双跳

我正在尝试获取一个 API 以将客户端凭据传递到数据库(在不同的服务器上),但遇到的东西对我来说很像 Kerberos 双跳问题,但是系统人员说 Kerberos 委派已设置适当地在有问题的服务器上。下面是我为测试它而编写的一个方法,底部是我通过 NTLM 将自己的凭据发送到 API 时在 Postman 中得到的响应正文。在发送我有权访问的另一个帐户的凭据时,我得到了类似的响应。当发送我知道是错误的凭据时,IIS 会停止我的请求并以 401 响应而不将请求发送到 API;这是预期和要求的。

除了 Kerberos 双跳之外,还有什么可能导致此问题?我的模拟实施是否存在缺陷?我无权访问任何有问题的服务器,但如果需要,我可以提供控制器遇到的整个丑陋异常。

API返回的JSON...

0 投票
0 回答
78 浏览

kerberos - Kerberos 如何代表用户进行委派和访问独立于用户的资源

我有一个在 Linux 上运行的 webapp,它使用委派来有效地镜像发出请求的用户的权限。webapp 使用如下所示的 keytab:

并且适当的 SPN 被添加到 webapp 的服务帐户中,如下所示:

这一切都很好。

对 web 应用程序有一个新的要求,即它还能够访问它需要的资源,而独立于它代表用户所做的委派。例如,它需要访问应用程序用户不一定有权访问的数据库。webapp 有没有办法使用相同的 Keytab 来生成票证,这样它既可以继续代表用户进行委托,又可以访问它所需的资源?

0 投票
1 回答
189 浏览

java - 跨领域设置中基于 Kerberos 资源的约束委派

我正在尝试使用最新的 JDK 8 来执行基于资源的约束委派,并且似乎遇到了获取 S4U2Proxy 调用最后一站的服务票证的问题。

这是我的设置:两个启用了两种林身份验证的 Microsoft AD 林。

  • 森林A:forestA.com
  • 森林B:forestB.com
  • 前端服务位于 ForestA 中,SPN 为 http/myappserver.forestA.com
  • ForestB 中的后端服务,SPN 为 http/backend.forestB.com
  • 被模拟的用户在 ForestB 中,用户名为 userB。

我已经成功地使用了 S4U2Self 协议,并为用户 B 检索到 ForestA 中的前端服务的服务票证。但是,当尝试使用 S4U2Proxy 获取 ForestB 中后端服务的服务票证时,请求失败,错误代码为 kerberos 错误 12。

在调查 ForestB 域控制器上事件查看器的审核日志后,它表明错误消息是 0xC000019B(事件 ID 4769),这似乎与一些通用的信任设置问题有关。

任何具有相同有效负载的进一步请求都会导致从 ForestB 的域控制器返回的 Kerberos 错误代码 28。可能是由于之前缓存了 kerberos 票证?

更新:

如果前端服务和用户在同一个林中,而后端服务在不同的林中,则此设置可以正常工作。

当前端服务和后端服务在一个林中并且用户在不同的林中时,它也可以工作。